8/17/2019 Programarea SAS
1/37
1
Curs 10: Introducere în programarea SAS
8/17/2019 Programarea SAS
2/37
2
Un programSAS constă dintr -o secvenţă de paşi trimisă
către execuţie motorului SAS.
Programe SAS
Secţiunile de date (DATA steps) sunt, de obicei,folosite pentru a crea tabele SAS.
Secţiunile de proceduri (PROC steps) sunt, de obicei,folosite pentru a efectua prelucrări şi interogări.
Secţiune de date Raport
TabeleSAS
existente
TabelăSASnouă
Secţiune de proceduri
Fişier
Text
8/17/2019 Programarea SAS
3/37
3
Tipuri de fişiere în SAS
ASCII
Externe Fişiere generate de alte aplicaţii
Fişiere în SAS Interne Temporare – nume pe un nivel
Permanente - nume pe nouă niveluri (libref.nume)
8/17/2019 Programarea SAS
4/37
4
Instructiunile SAS au următoarele caracteristici:
încep, de obicei, cu un cuvânt cheie întotdeuna se termină cu punct şi virgulă
Reguli de sintaxă
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;
8/17/2019 Programarea SAS
5/37
5
Unul sau mai multe caractere de spaţiere 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 rânduri.
Mai multe instructiuni pot fi scrise pe acceaşi linie.
Reguli de sintaxă
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;
8/17/2019 Programarea SAS
6/37
6
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;
Comentarii SAS
8/17/2019 Programarea SAS
7/377
SAS compilează şi execută fiecare secţiune în modindependent bazandu-se pe ceea ce poartă denumirea delimite ale unei secţiuni.
Limitele unei secţiuni:
Limite explicite: RUN şi QUIT au rolul de a executasecţiunea anterioară;
Limite implicite: DATA şi PROC indică începutul uneisecţiuni.
O secţiune de date sau de proceduri se termină atunci cîndse întâlneşte o altă secţiune, ceea ce înseamnă căprezenţa declaraţiilor RUN şi QUIT nu este obligatorie.
Limite ale unei secţiuni
8/17/2019 Programarea SAS
8/378
Trebuie furnizate valorile datelor. Nu se salvează ca un set de date într -o locaţie 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';
Fişiere temporare
8/17/2019 Programarea SAS
9/379
O bibliotecă SAS este o colecţie care include unul sau mai
multe fişiere SAS care sunt recunoscute de SAS şi caresunt referite şi stocate în mod unitar.
Sintaxa este:
LIBNAME libref ‘Biblioteca-SAS‘;
LIBNAME – defineşte o bibliotecă libref – este o referinţă la o bibliotecă, un alias pentru o
locaţie fizică unde se găsesc fişierele incluse în bibliotecă
‘Bilioteca-SAS‘ – este locaţiea fizică propriu-zisă
LIBNAME exemple‘C:\
curs‘;
Libname nu este parte a unei secţiuni de date sau deproceduri şi nu are nevoie de RUN pentru a rula.
Se pot defini oricâte declaraţii LIBNAME.
Biblioteca Work este temporară şi se iniţializează la
dechiderea sesiunii de lucru SAS.
Biblioteci SAS
8/17/2019 Programarea SAS
10/3710
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 var 1=‘eticheta1’ var 2=‘eticheta2’; FORMAT variabila(le) format;
RUN;
Crearea seturilor de date SAS din seturi dedate existente -1
8/17/2019 Programarea SAS
11/3711
Implicit toate întregistrările dintr -un set de date de intraresunt scrise în setul de date rezultat.
Declaraţia WHERE are rolul de a extrage observaţiile dintr -un set de date. O secţiune de date poate include o singurădeclaraţie WHERE.
Include operatori de comparaţie identici cu cei de lafiltrele 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;
Crearea seturilor de date SAS din seturi dedate existente -2
8/17/2019 Programarea SAS
12/3712
Extragerea (selectarea) variabilelor din setul rezultat serealizează cu ajutorul declaraţiilor DROP şi KEEP:
DROP listă-variabile; {cu spaţiu între ele} arată care suntvariabilele care se exclud din setul rezultat
KEEP listă-variabile; {cu spaţiu între ele} arată care suntvariabilele care se păstrează în setul rezultat
Declaraţia LABEL are rolul de a adăuga o etichetă la zonade descriere a unui set de date. Eticheta schimbă modul încare apare numele variabilei în diverse proceduri. Spre
exemplu, PROC PRINT poate afişa numele etichetei în locde numele variabilei:
PROC PRINT DATA = set-de-date-SAS LABEL;
FORMAT este un format de afişare care schimbă modul de
afişare a variabilelor: format .
Crearea seturilor de date SAS din seturi dedate existente -3
8/17/2019 Programarea SAS
13/37
Citirea datelor din fişiere flat Procesul de citire a fişierelor de date flat
13
8/17/2019 Programarea SAS
14/37
Delimitatorul spaţiu
14
Considerând că avem un fişier numit produse.txt care conţine numele, preţulşi categoria a cinci produse, fiecare având valoarea separată printr -unspaţiu, acesta ar avea următoarea formă:
hartie 2 birotica
creione 10 birotica
apa 6 alimente
ceai 8 alimente
tricou 100 haine
Presupunând că fişierul este stocat în calculatorul local în directorulc:\exemple, programul SAS care citeşte date din acest fişier este:
data produse1;
infile 'c:\exemple\produse1.txt';
input Nume $ Pret Categorie $;
run;
8/17/2019 Programarea SAS
15/37
Delimitatorul virgulaPentru fişierul de date:
hartie,2,birotica
creione,10,birotica
apa,6,alimente
ceai,8,alimente
tricou,100,haine
se vor folosi următoarele declaraţii pentru a obţine setulde date produse:
data produse2;infile 'c:\exemple\produse2.txt' dsd;
input Nume $ Pret Categorie $;
run;
15
8/17/2019 Programarea SAS
16/37
Alţi delimitatori Pentru orice alt tip de delimitatori, instrucţiunea infile trebuie
folosită împreună cu opţiunea dlm sau delimiter. Au aceeaşi seminificaţie, prima fiind abrevierea celeilalte.
Exemplu: infile 'c:\date sas\produse.txt' delimiter='/';
sau infile 'c:\date sas\produse.txt' dlm='/';.
16
8/17/2019 Programarea SAS
17/37
Fisiere cu date in coloane cu latime fixaCel de-al doilea tip de fişiere externe pe care SAS poate
să le citească sunt cele care conţin date în coloane culăţime fixă. Pentru acestea există două modalităţi decitire:
coloane de intrare (column input)
intrări formatate (formatted input) Avantajul folosirii datelor în coloane cu lăţime fixă este
acela că datele pot fi citite în orice ordine estenecesară, iar valorile lipsă pot fi specificate prin tot
atâtea spaţii libere cât are şi lăţimea coloanei.
17
8/17/2019 Programarea SAS
18/37
Metoda 1Considerăm din nou fişierul produse.txt , care conţine
următoarele valori: hartie 2 birotica
creione10 birotica
apa 6 alimente
ceai 8 alimente
tricou 100haine
Aşa cum se poate observa, numele are 7 caractere, preţul3, iar categoria 8.
18
8/17/2019 Programarea SAS
19/37
Fisiere cu date in coloane cu latime fixa Metoda 1: Coloane de intrare foloseşte declaraţia input
specificând pentru fiecare variabilă numele său, semnul $
pentru variabilele caracter, precum şi poziţia de început şi de
sfârşit a fiecărei variabile în linia de date.data produse3;
infile 'c:\exemple\produse3.txt';input Nume $ 1-7
Pret 8-10
Categorie $ 11-18;
run;
19
8/17/2019 Programarea SAS
20/37
Fisiere cu date in coloane cu latime fixa Metoda 2: Intrări formatate poate citi diferite tipuri de
formate, cum ar fi monedă (numere având semnuldolar sau euro), numere cu zecimale, date în diferiteformate.
Declaraţia input are umătoarele opţiuni: semnul @
urmat de poziţia de început a variabilei în linia de date,numele variabilei, formatul variabilei, dacă acesta estenecesar, precum şi lăţimea coloanei asociată variabilei.
input @pozitie nume_var ialilă format lăţime.
20
8/17/2019 Programarea SAS
21/37
Exemplu metoda 2data 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 alimenteceai $8 alimente
tricou $100haine */
run;
21
8/17/2019 Programarea SAS
22/37
Procesare condiţională în programele SAS Procesarea condiţională reprezintă capacitatea
programelor SAS de a lua decizii în funcţie de valoriledatelor.
Principala construcţie pentru procesarea condiţionalăeste declaraţia IF, împreună cu versiunea ei ELSE IF.
Forma generală a acestei instructiuni este:IF expresie THEN instructiune;
ELSE instructiune;
22
8/17/2019 Programarea SAS
23/37
Operatorii logici de comparaţie din SAS
23
Operator de comparatie SintaxaSAS
Equal to EQ
Not equal to NE
Less than LT
Grater than GT
Less than or equal to LE
Grater than or equal to GE
Equal to one in a list IN
8/17/2019 Programarea SAS
24/37
Exemplulibname 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
8/17/2019 Programarea SAS
25/37
Subseturi de date Intr-o sectiune de date, observatiile pot fi regrupate intr-
un subset de date SAS folosind clauzele WHERE,DELETE sau instrucţiunea IF. Exemplu de crearea aunui 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
8/17/2019 Programarea SAS
26/37
Subseturi de date
26
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;
8/17/2019 Programarea SAS
27/37
27
Vizualizarea codului generat de SAS EnterpriseGuideCod parţial al unei prelucrări
8/17/2019 Programarea SAS
28/37
28
Vizualizarea codului generatPentru a vizualiza tot codul SAS necesar pentru generarea
rezultatelor unei prelucrări, se selectează Tools Options Tasks General , opţiunea Display all generated SAS code in taskoutput.
8/17/2019 Programarea SAS
29/37
29
Vizualizarea codului generat
Cod detaliat pentru
generarearezultatelor în
format HTML, PDFsau SAS
8/17/2019 Programarea SAS
30/37
30
Editatea codului SAS existentCodul SAS generat de o prelucrare este read-only.
Încercarea de a-l modifica generează apariţia ferestrei dinimagine.
8/17/2019 Programarea SAS
31/37
31
Editatea codului SAS existent
Un obiect de tipcod este adăugat
la proiect.
Codul poate fi
editat. Noul cod numai este asociatprelucrării.
8/17/2019 Programarea SAS
32/37
32
Personalizarea codului prelucrărilor
Selectaţi Preview code
pentru aprevizualiza
codul generat.
Selectaţi InsertCode… pentru aadăuga cod SAS.
8/17/2019 Programarea SAS
33/37
33
Personalizarea codului prelucrărilor
Selectaţi poziţia încare codul va fi inserat în programul asociat
prelucrării.
8/17/2019 Programarea SAS
34/37
34
Personalizarea codului prelucrărilor
Codul personalizateste inclus ca parte aprogramului asociat
prelucrării.
8/17/2019 Programarea SAS
35/37
35
Inserarea automată de cod Selectaţi Tools Options Custom Code.
Inserează cod înainte şi după
întreg codul trimisspre execuţie.
8/17/2019 Programarea SAS
36/37
36
Inserarea codului înainte şi după prelucrări
8/17/2019 Programarea SAS
37/37
Descoperiţi şi testaţi funcţiile oferite de SAS
Enterprise Guide pentru adăugarea, crearea şiexportul de programe SAS.
Lucru individual
Top Related