sas - econ.ubbcluj.rorodica.lung/sase/cursuri/sas2.pdf · rapoarte •obiective • cum aleg baza...
TRANSCRIPT
Rapoarte
• Obiective
• cum aleg baza de date
• cum selectez anumite variabile sau observații
• Sortare de date
• Specificare de totaluri
• Adăugare de titluri și note de subsol
• Adăugare de etichete
• FORMATS
Rapoarte simple
libname curs2 ”C:\......”;
proc print data=curs2.admit;
run;
Total pe coloane (variabile)
proc print data=curs2.admit;
sum fee;
run;
Sortare și etichete
proc sort data=curs2.admit;
by age;
run;
proc print data=curs2.admit label;
var age height weight fee;
label fee=“Taxa”;
run;
Filtrare de observatii/variabile
proc print data=curs2.admit noobs;
var age height weight fee;
where age>30;
run;
PROC PRINT
• forma generala: proc print <data=sasdataset>;
run;
• implicit:
• se afiseaza toate observatiile si variabilele;
• se afiseaza o coloana Obs/nr. observatiei in tabel;
• variabilele apar in ordinea in care sunt in tabel
Selectarea variabilelor
• selectarea variabilelor var variabila(e);
unde variabilele sunt separate prin spatii.
proc print data=curs2.admit;
var age height weight fee;
run;
• coloana Obs on/off: optiunea noobs in linia lui proc
print;
Identificarea observatiilor
• forma generala: ID variabila(e);
Unde variabilele indica una sau mai multe variabile care vor fi tiparite in loc de numarul observatiei la inceputul fiecarui rand din raport
• In output-ul clasic variabilele din ID se vor repeta la fiecare observatie care e afisata pe mai mult de o linie.
proc print data=curs2.admit;
id ID Name;
run;
• Daca o variabila apare si pe coloana VAR atunci va fi afisata de doua ori
proc print data=curs2.admit;
id ID Name;
var Name age fee;
run;
Selectarea observatiilor
• forma generala:
where expresie_where;
unde expresie_where contine conditia de selectare a observatiilor
proc print data=curs2.admit;
var age height weight fee;
where age>30;
run;
Expresii „where‟
• se pot metiona toate variabilele din tabel (nu doar cele din
lista var);
• pt. variabilele caracter
• se folosesc ghilimele obligatoriu;
• se tine cont de majuscule/minuscule;
• operatori:
• = sau eq;
• ^= sau ne;
• > sau gt;
• < sau lt;
• >= sau ge;
• <= sau le;
Continuare Where
• operatorul CONTAINS / ? where name contains “Jon”;
sau where name ? “Jon”;
• Compunerea expresiilor • AND sau &
• OR sau |
where age<=55 and pulse>75;
where sex=“F” or age<30;
• IN pentru „apartine‟ where age in (24,35,67);
where fee in (124.80, 178.20);
• Folosim paranteze pentru a controla ordinea calculului
Sortarea datelor
• proc print afiseaza observatiile in ordinea in care apar
in baza de date;
• proc sort:
• rearanjeaza datele din tabelul SAS;
• creaza un nou tabel SAS care contine datele rearanjate;
• implicit inlocuieste tabelul SAS original (daca nu se specifica altfel);
• ordoneaza dupa mai multe variabile;
• ordoneaza crescator/descrescator;
• nu genereaza raport;
• trateaza valorile lipsa ca fiind cele mai mici valori posibile.
Sortarea datelor
• Forma generala
proc sort data=sasdataset <out=sasdataset>;
by <descending> variabile;
run;
unde
• data= specifica tabelul care trebuie ordonat;
• out= specifica tabelul care va contine datele ordonate;
• variabilele by sunt variabilele dupa care se face sortarea;
• optiunea <descending> se aplica variabilei imediat
urmatoare
• daca nu se specifica out= se sorteaza permanent tabelul
mentionat la data=
Exemplu
• Sa se ordoneze permanent tabelul curs2.admit dupa greutate si varsta;
• rezultatul sa se scrie in tabelul wgtadmit;
• sa se afiseze cele doua tabele; proc sort data=curs2.admit out=work.wgtadmit;
by weight age;
run;
proc print data=curs2.admit;
var age height weight fee;
run;
proc print data=work.wgtadmit;
var age height weight fee;
run;
Exemplu (cont)
• sortati variabila weight descrescator
proc sort data=curs2.admit out=work.wgtadmit;
by descending weight age;
run;
proc print data=work.wgtadmit;
var age height weight fee;
run;
Totaluri pe coloane
• forma generala: sum variable(s);
unde varible(s) sunt variabilele pentru care se doreste
calcularea sumei separate prin spatii.
• variabilele din sum pot sa nu apara in var…
proc print data=curs2.admit;
var age fee;
where age>30;
sum fee;
run;
Subtotaluri
• combinam sum cu by in proc print.
• forma generala by in proc print: by <descending> var1 … <descending> varn <notsorted>;
unde
• variabilele din by specifica o variabila care se va folosi pentru a crea
grupuri by. Se pot specifica mai multe separate de spatii.
• <descending> - grupurile vor fi sortate descrescator dupa variabila
corespunzatoare.
• notsorted – observatiile nu trebuie sortate; daca nu sunt sortate vor
aparea grupate in ordinea in care apar/se repeta.
• daca nu e folosita optiunea notsorted trebuie asigurata ordonarea
datelor inainte de afisare.
Exemplu
• sa se calculeze subtotalurile variabilei fee in functie de Actlevel in curs2.admit
proc sort data=clinic.admit out=work.activity;
by actlevel;
run;
proc print data=work.activity;
var age height weight fee;
sum fee;
by actlevel;
run;
• rezultatul: tabele separate pt fiecare valoare a lui actlevel;
Gruparea cu instructiuni BY si ID
• pentru a arata variabila BY doar o data combinam ID cu
BY si SUM:
• cand ID specifica aceeasi variabila ca si BY:
• se ascunde coloana OBS
• variabila ID/BY apare pe coloana cea mai din stanga;
• fiecare valoare ID/BY apare doar la inceputul fiecarui grup BY si
pe linia care contine subtotalul
Exemplu
proc sort data=curs2.admit out=work.activity;
by actlevel;
run;
proc print data=work.activity;
var age height weight fee;
sum fee;
by actlevel;
id actlevel;
run;
Subtotaluri pe pagini diferite
• PAGEBY – forma generala pageby variabila-by;
unde variabila-by identifica o variabila intr-o instructiune BY din proc print.
• de fiecare data cand cand valoarea variabilei se schimba proc print incepe o pagina noua.
Exemplu
proc sort data=curs2.admit out=work.activity;
by actlevel;
run;
proc print data=work.activity;
var age height weight fee;
sum fee;
by actlevel;
id actlevel;
pageby actlevel;
run;
Personalizarea raportului
• adaugarea de titlu si nota de subsol
• inlocuirea numelor de variabile cu etichete
• formatarea valorilor de variabile
TITLE si FOOTNOTE
• pana la 10 titluri /note de subsol inainte de pas proc.
• instructiuni globale – se aplica din momentul procesarii la
tot ce urmeaza;
• forma generala: title<n> “text”;
footnote<n> “text”;
unde n e un numar de la 1 la 10 care specifica la al
catelea tilu/nota de subsol se refera;
• lungimea maxima e data de optiunea linesize=; • titlu=titlu1/footnote=footnote1;
• titlul implicit este “The SAS System”;
Exemplu: titlu
title1 “titlu pe linia 1”;
title3 “titlu pe linia 3”;
proc print data=curs2.admit;
var age height fee;
where fee>100;
run;
• In varianta html nu se vede linie libera
• In listing DA
Exemplu: note de subsol
footnote1 “nota de subsol 1”;
footnote3 “nota de subsol 3”;
proc print data=curs2.admit;
var age height fee;
where fee>100;
run;
• La fel ca si la titlu, e diferenta intre varianta html si cea
„listing‟;
Modificare si anulare
• TITLE si FOOTNOTE sunt instructiuni globale;
• Raman valabile pe toata durata programului sau pana
sunt anulate;
• Modificare: prin inlocuirea textului: title3 “titlu 3 nou”;
• Anulare: comanda fara text: title3;
footnote3;
• se anuleaza si textul implicit de titlu;
• title; footnote; anuleaza toate titlurile/notele de subsol de
pana atunci;
Etichete - PROVIZORII
• proc print afiseaza numele variabilelor din tabelul
SAS.
• Daca vrem sa afiseze alt text: folosim LABEL
• instructiunea LABEL care atribuie eticheta unei variabile
• optiunea LABEL in proc print;
• forma generala: label var1=“eticheta 1” var2=“eticheta 2”….;
• etichetele: max 256 caractere/intre ghilimele
• valabile doar in pasul proc in care sunt definite;
Etichete – exemplu
proc print data=curs2.admit label;
label age=“Varsta” weight=“Greutatea”;
run;
sau
proc print data=curs2.admit label;
label age=“Varsta”;
label weight=“Greutatea”;
run;
FORMATS - tot provizorii
• in SAS formatul prezentarii datelor e controlat cu FORMATS
• formatarile afecteaza doar modul de afisare, nu felul cum sunt pastrate datele in SAS
• forma generala: format variabila(e) nume_format;
unde
• variabila(ele) urmeaza sa fie afisate folosind nume_format;
• nume_format indica un format SAS predefinit sau definit de utilizator
• se pot folosi separat mai multe instructiuni format pt variabile diferite sau nu.
• are efect doar in cadrul pasului proc in care a fost definit.
Exemple
proc print data=clinic.admit;
var actlevel fee;
where actlevel='HIGH';
format fee dollar4.;
run;
Formats
w – latimea campului
• w – latimea totala a campului cu zecimale, semne speciale ($,€, etc.) si semnul de zecimala respectiv virgula daca se vrea afisata;
• w – trebuie definit cu atentie – destul de mare;
• Exemplu: pentru a afisa numarul 5400 in forma: 5,400 se foloseste commaw.d cu comanda: format variabila comma5.0;
• se ia latimea 5 pentru ca se numara si „,‟;
d – numar de zecimale
format variabila comma8.2;
afiseaza numarul 1234 ca 1,234.00
Exemple
daca un format e prea mic pentru a afisa corect informatia se
emite o NOTA in SAS log
Atribuirea permanenta de
formatari/etichete • intr-un pas DATA – se salveaza impreuna cu tabelul SAS
data curs2.admit1;
set curs2.admit;
label age=“varsta”;
format fee dollar6.2;
run;
proc print data=curs2.admit1 label;
run;
In plus…
• Pentru afisarea etichetelor pe mai multe randuri…
proc print data=curs2.admit label split=“*”;
var age height fee;
label fee=“taxa de* internare”;
run;