Curs 10: Introducere n programarea SAS
Programe SAS
Un programSAS const dintr-o secven de pai trimis
ctre execuie motorului SAS.
Seciunile de date (DATA steps) sunt, de obicei,
folosite pentru a crea tabele SAS.
Fiier
Text
Seciune de
date
Tabele
SAS
existente
Tabel
SAS
nou
Seciune de
proceduri
Raport
Seciunile de proceduri (PROC steps) sunt, de obicei,
folosite pentru a efectua prelucrri i interogri.
Tipuri de fiiere n SAS
Externe
ASCII
Fiiere generate de alte aplicaii
Interne
Temporare nume pe un nivel
Fiiere n SAS
Permanente - nume pe nou niveluri ([Link])
Reguli de sintax
Instructiunile SAS au urmtoarele caracteristici:
ncep, de obicei, cu un cuvnt cheie
ntotdeuna se termin cu punct i virgul
libname ad_data 'C:\exemple';
data ad_data.orders;
infile 'C:\exemple\[Link]';
input Order_No 1-5 Prod_ID $ 2-10
Quantity 13-15 SellPrice 17-22
Income 25-32;
run;
proc print data=ad_data.orders;
run;
proc means data=ad_data.orders;
title 'Orders Analysis';
var SellPrice;
run;
4
Reguli de sintax
Unul sau mai multe caractere de spaiere pot fi folosite
pentru a separa cuvintele.
Instructiunile pot ncepe i se pot termina n orice coloan.
O singur instructiune se poate scrie pe mai multe rnduri.
Mai multe instructiuni pot fi scrise pe acceai linie.
libname ad_data 'C:\exemple';
data ad_data.orders;
infile 'C:\exemple\[Link]';
input Order_No 1-5 Prod_ID $ 2-10
Quantity 13-15 SellPrice 17-22 Income
25-32;
run;
proc print data=ad_data.orders;
run;
proc means
data=ad_data.orders;
title 'Orders Analysis; var SellPrice; run;
Comentarii SAS
Comentarii bloc: /*comentariu*/
Comentarii care pot fi incluse in cod: * comentariu;
cod * comentariu; cod
/* Creaza tabela SAS ad_data.orders */
libname ad_data 'C:\exemple';
data ad_data.orders;
infile 'C:\exemple\[Link]';
input Order_No 1-5 Prod_ID $ 2-10
Quantity 13-15 SellPrice 17-22 Income 25-32;
run;
/* Realizeaza un raport lista
pentru ad_data.orders */
proc print data=ad_data.orders;
run;
6
Limite ale unei seciuni
SAS compileaz i execut fiecare seciune n mod
independent bazandu-se pe ceea ce poart denumirea de
limite ale unei seciuni.
Limitele unei seciuni:
Limite explicite: RUN i QUIT au rolul de a executa
seciunea anterioar;
Limite implicite: DATA i PROC indic nceputul unei
seciuni.
O seciune de date sau de proceduri se termin atunci cnd
se ntlnete o alt seciune, ceea ce nseamn c
prezena declaraiilor RUN i QUIT nu este obligatorie.
Fiiere temporare
Trebuie furnizate valorile datelor.
Nu se salveaz ca un set de date ntr-o locaie specificat.
data ord;
input age sex $ prod_id quantity order_date mmddyy8.;
format order_date yymmdds10.;
cards;
25 f 02344 2 05/27/10
37 m 08798 4 04/29/10
45 f 09876 1 05/27/10
19 m 07897 3 05/30/10
proc sort data=ord; by descending order_date;
proc print data=ord;
title 'Unfulfilled orders';
Biblioteci SAS
O bibliotec SAS este o colecie care include unul sau mai
multe fiiere SAS care sunt recunoscute de SAS i care
sunt referite i stocate n mod unitar.
Sintaxa este:
LIBNAME libref Biblioteca-SAS;
LIBNAME definete o bibliotec
libref este o referin la o bibliotec, un alias pentru o
locaie fizic unde se gsesc fiierele incluse n bibliotec
Bilioteca-SAS este locaiea fizic propriu-zis
LIBNAME exemple C:\curs;
Libname nu este parte a unei seciuni de date sau de
proceduri i nu are nevoie de RUN pentru a rula.
Se pot defini oricte declaraii LIBNAME.
Biblioteca Work este temporar i se iniializeaz la
dechiderea sesiunii de lucru SAS.
Crearea seturilor de date SAS din seturi de
date existente -1
Sintaxa generala:
DATA set-de-date-SAS-de-iesire;
SET set-de-date-SAS-de-intrare;
WHERE expresie-conditionala;
DROP list-variabile;
KEEP list-variabile;
LABEL var1=eticheta1 var2=eticheta2;
FORMAT variabila(le) format;
RUN;
10
Crearea seturilor de date SAS din seturi de
date existente -2
Implicit toate ntregistrrile dintr-un set de date de intrare
sunt scrise n setul de date rezultat.
Declaraia WHERE are rolul de a extrage observaiile dintrun set de date. O seciune de date poate include o singur
declaraie WHERE.
Include operatori de comparaie identici cu cei de la
filtrele din SAS Enterprise Guide.
Exemple:
where gen eq M;
where salariu ne .;
where pozitie contain Vanzari;
where nume like T_M%;
where cod is missing;
11
Crearea seturilor de date SAS din seturi de
date existente -3
12
Extragerea (selectarea) variabilelor din setul rezultat se
realizeaz cu ajutorul declaraiilor DROP i KEEP:
DROP list-variabile; {cu spaiu ntre ele} arat care sunt
variabilele care se exclud din setul rezultat
KEEP list-variabile; {cu spaiu ntre ele} arat care sunt
variabilele care se pstreaz n setul rezultat
Declaraia LABEL are rolul de a aduga o etichet la zona
de descriere a unui set de date. Eticheta schimb modul n
care apare numele variabilei n diverse proceduri. Spre
exemplu, PROC PRINT poate afia numele etichetei n loc
de numele variabilei:
PROC PRINT DATA = set-de-date-SAS LABEL;
FORMAT este un format de afiare care schimb modul de
afiare a variabilelor: <$>format <w>.<d>
Citirea datelor din fiiere flat
Procesul de citire a fiierelor de date flat
13
Delimitatorul spaiu
Considernd c avem un fiier numit [Link] care conine numele, preul
i categoria a cinci produse, fiecare avnd valoarea separat printr-un
spaiu, acesta ar avea urmtoarea form:
hartie 2 birotica
creione 10 birotica
apa 6 alimente
ceai 8 alimente
tricou 100 haine
Presupunnd c fiierul este stocat n calculatorul local n directorul
c:\exemple, programul SAS care citete date din acest fiier este:
data produse1;
infile 'c:\exemple\[Link]';
input Nume $ Pret Categorie $;
run;
14
Delimitatorul virgula
Pentru fiierul de date:
hartie,2,birotica
creione,10,birotica
apa,6,alimente
ceai,8,alimente
tricou,100,haine
se vor folosi urmtoarele declaraii pentru a obine setul
de date produse:
data produse2;
infile 'c:\exemple\[Link]' dsd;
input Nume $ Pret Categorie $;
run;
15
Ali delimitatori
Pentru orice alt tip de delimitatori, instruciunea infile trebuie
folosit mpreun cu opiunea dlm sau delimiter. Au aceeai
seminificaie, prima fiind abrevierea celeilalte.
Exemplu: infile
'c:\date sas\[Link]' delimiter='/';
sau
infile 'c:\date sas\[Link]' dlm='/';.
16
Fisiere cu date in coloane cu latime fixa
Cel de-al doilea tip de fiiere externe pe care SAS poate
s le citeasc sunt cele care conin date n coloane cu
lime fix. Pentru acestea exist dou modaliti de
citire:
coloane de intrare (column input)
intrri formatate (formatted input)
Avantajul folosirii datelor n coloane cu lime fix este
acela c datele pot fi citite n orice ordine este
necesar, iar valorile lips pot fi specificate prin tot
attea spaii libere ct are i limea coloanei.
17
Metoda 1
Considerm din nou fiierul [Link], care conine
urmtoarele valori:
hartie 2 birotica
creione10 birotica
apa 6 alimente
ceai 8 alimente
tricou 100haine
Aa cum se poate observa, numele are 7 caractere, preul
3, iar categoria 8.
18
Fisiere cu date in coloane cu latime fixa
Metoda 1: Coloane de intrare folosete declaraia input
specificnd pentru fiecare variabil numele su, semnul $
pentru variabilele caracter, precum i poziia de nceput i de
sfrit a fiecrei variabile n linia de date.
data produse3;
infile 'c:\exemple\[Link]';
input Nume $ 1-7
Pret 8-10
Categorie $ 11-18;
run;
19
Fisiere cu date in coloane cu latime fixa
Metoda 2: Intrri formatate poate citi diferite tipuri de
formate, cum ar fi moned (numere avnd semnul
dolar sau euro), numere cu zecimale, date n diferite
formate.
Declaraia input are umtoarele opiuni: semnul @
urmat de poziia de nceput a variabilei n linia de date,
numele variabilei, formatul variabilei, dac acesta este
necesar, precum i limea coloanei asociat variabilei.
input @pozitie nume_varialil format lime.
20
Exemplu metoda 2
data produse4;
infile 'c:\exemple\[Link]';
input @1 Nume $7.
@8 Pret dollar4.
@12 Categorie $8.;
format Pret dollar6.0;
/*
datalines;
hartie $2 birotica
creione$10 birotica
apa
$6 alimente
ceai
$8 alimente
tricou $100haine */
run;
21
Procesare condiional n programele SAS
Procesarea condiional reprezint capacitatea
programelor SAS de a lua decizii n funcie de valorile
datelor.
Principala construcie pentru procesarea condiional
este declaraia IF, mpreun cu versiunea ei ELSE IF.
Forma general a acestei instructiuni este:
IF expresie THEN instructiune;
ELSE instructiune;
22
Operatorii logici de comparaie din SAS
Operator de comparatie
Equal to
Not equal to
Less than
Grater than
Less than or equal to
Grater than or equal to
Equal to one in a list
23
Sintaxa
SAS
EQ
NE
LT
GT
LE
GE
IN
Exemplu
libname exemple 'C:\exemple';
data exemple.produse4;
infile 'c:\exemple\[Link]';
input @1 Nume $7.
@8 Pret dollar4.
@12 Categorie $8.;
if missing(Pret) or Pret lt 5 then
Grup=1;
else if Pret le 10 then Grup=2;
else Grup=3;
run;
24
Subseturi de date
Intr-o sectiune de date, observatiile pot fi regrupate intrun subset de date SAS folosind clauzele WHERE,
DELETE sau instruciunea IF. Exemplu de crearea a
unui subset de date pentru categoria de produse
alimente:
data mancare;
set [Link];
where Categorie eq 'alimente';
run;
Daca am dori un subset de date pt grupul 1, conditia ar fi:
where Grup eq 1;
25
Subseturi de date
Clauza DELETE este folosita pentru a controla care observatii sa nu fie incluse in subsetul de date.
Sintaxa este: IF expresie THEN DELETE;
Un subset de date care sa contina toate produsele mai putin alimentele:
data non_mancare;
set [Link];
if Categorie eq 'alimente' then delete;
run;
Acelasi lucru poate fi obtinut folosind clauza WHERE si conditia not equal:
data non_mancare;
set [Link];
where Categorie ne 'alimente';
run;
Acelasi lucru poate fi obtinut folosind instructiunea IF fara clauza THEN:
data non_mancare;
set [Link];
if Categorie ne 'alimente';
run;
26
Vizualizarea codului generat de SAS Enterprise
Guide
Cod parial al unei prelucrri
27
Vizualizarea codului generat
Pentru a vizualiza tot codul SAS necesar pentru generarea
rezultatelor unei prelucrri, se selecteaz Tools Options
Tasks General , opiunea Display all generated SAS code in task
output.
28
Vizualizarea codului generat
Cod detaliat pentru
generarea
rezultatelor n
format HTML, PDF
sau SAS
29
Editatea codului SAS existent
Codul SAS generat de o prelucrare este read-only.
ncercarea de a-l modifica genereaz apariia ferestrei din
imagine.
30
Editatea codului SAS existent
Un obiect de tip
cod este adugat
la proiect.
31
Codul poate fi
editat. Noul cod nu
mai este asociat
prelucrrii.
Personalizarea codului prelucrrilor
Selectai Insert
Code pentru a
aduga cod SAS.
Selectai
Preview code
pentru a
previzualiza
codul generat.
32
Personalizarea codului prelucrrilor
Selectai poziia n
care codul va fi inserat
n programul asociat
prelucrrii.
33
Personalizarea codului prelucrrilor
Codul personalizat
este inclus ca parte a
programului asociat
prelucrrii.
34
Inserarea automat de cod
Selectai Tools Options Custom Code.
Insereaz cod
nainte i dup
ntreg codul trimis
spre execuie.
35
Inserarea codului nainte i dup prelucrri
36
Lucru individual
Descoperii i testai funciile oferite de SAS
Enterprise Guide pentru adugarea, crearea i
exportul de programe SAS.
37