Documente Academic
Documente Profesional
Documente Cultură
în SAS
CUPRINS Curs
1. Prelucrări analitice
2. Sistemul integrat SAS
3. Programea în limbajul SAS
Definirea conceptului
Alerte
Avantaje
Ce se poate face?
Unde este
Interogări/descompuneri
problema? Accesare şi
Cât, cât de des, raportare
Rapoarte ah-hoc
unde?
Rapoarte standard Ce şi când s-a
întâmplat?
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)
15
Reguli de sintaxă
Declarațiile SAS au următoarele caracteristici:
◼ Încep, de obicei, cu un cuvânt cheie.
18
Limite ale unei secţiuni
19
Crearea seturilor de date din fișiere
externe
Pentru a aplica proceduri specifice SAS, datele trebuie să fie
disponibile în seturi de date SAS.
Dacă datele nu se regăsesc în formatul specific SAS, atunci
există următoarele alternative de lucru:
➢ Crearea de seturi de date prin introducerea de date în
codul sursă prin care se crează setul de date (cu
DATALINES).
➢ Citirea datelor disponibile în fișiere flat. Acestea nu sunt
fișiere proprietare, iar înregistrările conțin valori care sunt
organizate în câmpuri.
➢ Accesarea datelor create prin intermediul altor aplicații,
spre exemplu MS Excel, Oracle, SPSS.
Indiferent de modalitatea de introducere a datelor sursă, se va
folosi secțiunea de date pentru a citi datele de intrare și a crea
20
setul de date rezultat.
Date furnizate în codul sursă
◼ Trebuie furnizate valorile datelor în interiorul secțiunii de date prin
declarația DATALINES (sau CARDS – un alias al acestei declarații,
provenit dintr-o versiune mai veche a limbajului).
◼ Setul de date de mai jos se salvează în biblioteca WORK (are numele pe
un singur nivel), fiind deci temporar.
data comanda;
input varsta gen $ id_prod cantitate data mmddyy8.;
format data yymmdds10.;
datalines;
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=comanda; by descending data;
proc print data=comanda;
title ‘Comenzi neonorate';
21
Înțelegerea structurii seturilor de date
Un set de date SAS este format din două zone:
➢ Zona de descriere = conține informații care caracterizează setul
de date per ansamblu, cum ar fi numele setului de date, data
creării, descrierea fiecărei variabile (nume, tip, lungime) etc.
Aceste informații poartă denumirea de metadate și pot fi
vizualizate cu procedura CONTENTS.
PROC CONTENTS DATA = set_date;
➢ Zona de date = conține datele propriu-zise ale setului de date,
care pot fi vizualizate cu o multitudine de proceduri, printre care
cea mai utillizată este PRINT.
PROC PRINT DATA = set_date;
22
Convenții de denumire specifice SAS
23
Tipuri de date
SAS a simplificat lucrul cu tipuri de date, existând date de tipul
numeric și de tipul caracter. Implicit, variabilele unui set de date
pot fi de tip numeric sau caracter.
▪ Variabilele numerice pot memora și valori în format științific și
sunt implicit stocate pe 8 octeți. Variabilele de tip caracter pot
memora până la 32.767 de caractere, fiecare caracter fiind stocat
pe un octet.
▪ Valorile de tip dată și timp sunt stocate în SAS ca și valori
numerice. Valoarea unei date calendaristice SAS este stocată
intern sub forma numărului de zile dintre data de 1 ianuarie 1960
și data specificată, putând fi un număr pozitiv sau negativ.
Valoarea de tip timp în SAS este stocată sub forma numărului de
secunde care s-au scurs de la miezul nopții în ziua curentă, deci
este o valoare între 0 și 86400.
24
Biblioteci SAS -1
◼ O bibliotecă SAS este o colecţie care include unul sau mai multe
fişiere SAS care sunt recunoscute de SAS şi care sunt 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ţia fizică propriu-zisă
LIBNAME exemple ‘C:\curs‘;
◼ LIBNAME nu este parte a unei secţiuni de date sau de proceduri şi
nu are nevoie de RUN pentru a rula.
◼ Referința la o bibliotecă rămâne valabilă până când aceasta se
anulează sau se schimbă sau până când se termină sesiunea SAS.
25
Biblioteci SAS -2
◼ Libref trebuie să refere un director existent, deoarece prin această
declarație nu se creează un nou director.
◼ Se pot defini oricâte declaraţii LIBNAME.
◼ Biblioteca Work este temporară şi se iniţializează la deschiderea
sesiunii de lucru SAS.
◼ Vizualizarea conținutului unei biblioteci se face cu procedura
CONTENTS.
26
Crearea seturilor de date din fișiere flat
Delimitatorul spaţiu
Considerând că avem un fişier numit exemplu1.txt care conţine
numele, preţul şi categoria a șase tipuri de copaci vândute,
fiecare având valoarea separată printr-un spaţiu, acesta ar avea
următoarea formă:
brad 40 conifer
molid 25 conifer
fag 42 foios
stejar 27 foios
liliac 33 arbust
alun 38 arbust
data exemplu1;
infile '/home/nume.prenume/exemplu1.txt';
input Nume $ Pret Categorie $;
run;
27
Delimitatorul virgulă
29
Fişiere cu date în coloane cu lăţime fixă
30
Fişiere cu date în coloane cu lăţime fixă
- exemplu
Considerăm un fișier în care valorile din fiecare camp incep de la o
anumita poziție:
brad 40 conifer
molid 25 conifer
fag 42 foioase
stejar 27 foioase
liliac 33 arbusti
alun 38 arbusti
Aşa cum se poate observa, numele are maxim 6 caractere, preţul 2, iar
categoria 7.
31
Fişiere cu date în coloane cu lăţime fixă
• 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.
*citire fisier text cu latime fixa metoda coloane de
intrare;
data exemplu3;
infile "/home/nume.prenume/exemplu3.txt";
input Nume $ 1-6
Pret 8-9
Categorie $ 10-17;
run;
32
Fişiere cu date în coloane cu lăţime fixă
33
Exemplu metoda 2
*citire fisier text cu latime fixa metoda intrari
formatate;
data exemplu4;
infile '/home/nume.prenume/exemplu4.txt';
input @1 Nume $6.
@8 Pret dollar3.
@12 Categorie $7.;
format Pret dollar6.0;
/*
datalines;
brad $40 conifer
molid $25 conifer
fag $42 foioase
stejar $27 foioase
liliac $33 arbusti
alun $38 arbusti */
run;
34
Asignarea de etichete
39
Cum lucrează SAS -1
▪ Secțiunea de date se execută în întregime o dată pentru fiecare
înregistrare. SAS procesează sețiunea de date în două faze:
▪ faza de compilare
▪ faza de execuție
1. Faza de compilare:
▪ SAS scanează fiecare declarație din secțiunea de date pentru
erori de sintaxă.
▪ SAS creează un buffer de intrare în care memorează datele din
fișierul flat, acest lucru fiind valabil numai pentru citirea din fișiere
flat, nu și din seturi de date SAS.
▪ Apoi SAS creează PDV (Program Data Vector), o zonă de
memorie realizată în timpul procesării secțiunii de date care are
rolul de a ajuta la construirea observației curente.
▪ Zona de descriere a unui set de date este creată la sfârșitul fazei
40
de compilare.
Cum lucrează SAS -2
Structura PDV (Program Data Vector)
_N_ _ERROR_ Var1 Var2 ...... Varn
1 0
Execută alte
declarații NU
Copiază în setul de 42
date de ieșire
Cum lucrează SAS -4
2. Faza de execuție:
• Execuția începe atunci când compilarea s-a realizat cu
succes.
• La începutul fazei de execuție, este inițializat PDV, _N_ cu 1,
_ERROR_ cu 0 și toate celelalte variabile cu valoarea lipsă.
• Se citește o înregistrare din fișierul de intrare și se pune în
buffer. Apoi, în PDV, se populează zona alocată pentru
fiecare variabilă din declarația INPUT cu valorile din buffer.
La sfârșit, SAS scrie valorile din PDV în noul set de date (cu
excepția celor temporare).
• Controlul este returnat la începutul secțiunii de date
pentru o nouă iterație în care _N_ este incrementat.
• Se reia procesul până la terminarea datelor din fișierul de
43
intrare.
Declarația INPUT - Omiterea locației unei
coloane
Pentru a putea omite locația unei coloane dintr-un fișier flat, la
citirea datelor în vederea creării unui set de date SAS, datele
trebuie să satisfacă următoarele condiții:
• Fiecare valoare este separată de următoarea prin cel puțin un
spațiu libar sau un delimitator (dacă folosim opțiunea DLM).
• Orice valoare lipsă este reprezentată prin spații (pentru
ambele tipuri de variabile).
• Valorile tuturor variabilelor de tip caracter au maxim 8
caractere și nu includ spații, în caz contrar se produc
trunchieri ale datelor.
Observație! În seturile de date SAS valorile lipsă sunt
reprezentate prin punct pentru variabilele numerice și spațiu
pentru cele de tip caracter. 44
Declarația INPUT - Plasarea mai multor
observații scurte pe aceeași linie
Pentru fișierele cu puține variabile și observații scurte, este o
practică des întâlnită plasarea mai multor observații pe
aceeași linie. Pentru a folosi această abordare, trebuie avute în
vedere următoarele aspecte:
• Datele de intrare trebuie să îndeplinească cele trei condiții
amintite în slide-ul anterior.
• Se pot pot pune numere diferite de observații pe linii
diferite.
• Se poate folosi declarația INPUT fără a preciza locația
coloanei plasând la sfârșitul declarației simbolurile “@@”
înainte de “;”.
45
Plasarea mai multor observații scurte pe
aceeași linie - exemplu
*Plasarea mai multor observatii pe aceeasi linie;
DATA studenti;
INPUT cod nota @@;
DATALINES;
1101 7 1102 9 1103 10 1104 7 1105 5 1106 8 1107 6 1108 10
1109 9 1110 7 1111 8 1112 5 1113 9 1114 10 1115 8 1116 7
;
RUN;
46
De lucru!
❖Dorim să importăm datele din fișierul exemplu5.txt:
brad 40 conifere
molid 25 conifere
fag 42 foiaose
stejar 27 foiaose
liliac 33 arbusti
alun 38 arbusti
cires 39 fructifere
mar 25 fructifere
❖Rulăm codul:
LIBNAME date "/home/nume.prenume";
data date.exemplu5;
infile '/home/nume.prenume/exemplu5.txt';
input Nume $ Pret Categorie $; 47
run;
De lucru!
❖Ce observați în rezultate?
❖Care credeți că este cauza?
❖O soluție o reprezintă stabilirea lățimii unei variabile prin
declarația LENGTH, având următoarea sintaxă:
LENGTH variabil_1 ... variabila_n <$> latime
Semnul $ indică faptul că variabilele dinaintea lui sunt de tip
caracter.
❖Rulăm din nou codul:
data date.exemplu5;
infile '/home/nume.prenume/exemplu5.txt';
length Categorie $ 10;
input Nume $ Pret Categorie $;
run;
48
1. Care variantă produce un set de date de ieșire corect?
*1;
data iesire;
INPUT var1 var2$ @@;
DATALINES;
01 aaaaaaaaa 02 bbbbbbbbb 03 ccccccccc
;
*2;
data iesire;
INPUT var1 var2 $ @@;
DATALINES;
01 aaaaaaaa 02 bbbbbbbb 03 cccccccc
;
*3;
data iesire;
INPUT var1 var2 @@;
DATALINES;
01 aaaaaaaa 02 bbbbbbbb 03 cccccccc
49
;
2. Dacă nu specificați opțiunea LIBRARY = în cadrul instrucțiunii PROC
FORMAT, formatele se for salva în biblioteca Work.Formats și vor exista:
a) Doar în procedura curentă
b) Doar in secțiunea de date curentă
c) Doar în sesiunea SAS curentă
d) Permanent
50
4. Formatul pozitie a fost create cu procedura FORMAT. Identificați
varianta corectă de aplicare a formatului asupra variabilei pozitie:
a) format pozitie pozitie;
b) format pozitie pozitie.;
c) format pozitie=pozitie;
d) format pozitie=‘pozitie’;
51
6. Formatele de afișare în SAS:
a) Se aplică pe fișiere de tip text
b) Afectează datele din tabele
c) Afectează modul de afișare a datelor
d) Se folosesc în secțiunile de date
e) Se folosesc în secțiunile de proceduri