Sunteți pe pagina 1din 37

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 (libref.nume)

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\orders.txt';
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\orders.txt';
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\orders.txt';
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 produse.txt 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\produse1.txt';
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\produse2.txt' 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\produse.txt' delimiter='/';

sau
infile 'c:\date sas\produse.txt' 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 produse.txt, 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\produse3.txt';
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\produse4.txt';
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\produse4.txt';
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 exemple.produse;
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 exemple.produse;
if Categorie eq 'alimente' then delete;
run;
Acelasi lucru poate fi obtinut folosind clauza WHERE si conditia not equal:
data non_mancare;
set exemple.produse;
where Categorie ne 'alimente';
run;
Acelasi lucru poate fi obtinut folosind instructiunea IF fara clauza THEN:
data non_mancare;
set exemple.produse;
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