Sunteți pe pagina 1din 27

Contents

II.6. Declaraţii şi proceduri uzuale .................................................................................. 1


II.7. Procesare iterativă şi condiţională ........................................................................... 3
II.7.1. Clauzele WHERE, IF şi SELECT .................................................................... 3
II.7.2. Clauzele DO, DO cu un număr cunoscut de iteraţii, DO WHILE şi DO
UNTIL....................................................................................................................... 10
II.8. Manipularea datelor prin funcţii SAS ................................................................... 15
II.8.1. Funcţii care rotunjesc şi trunchiază valori numerice ...................................... 15
II.8.2. Funcţii care lucrează cu valori lipsă ............................................................... 16
II.8.3. Funcţii statistice descriptive – funcţiile N, MEAN, MIN, MAX ................... 16

Import unui fisier Excel in SAS

PROC IMPORT
OUT= WORK.nume_set_date_creat
DATAFILE= "cale/nume_fisier.xlsx"
DBMS=xlsx
REPLACE;
SHEET="nume_foaie_de_calcul";
GETNAMES=YES;
RUN;

OUT = numele pentru fișierul de date SAS nou creat și unde să stocheze setul de date
odată ce este importat.
DATAFILE = unde se gaseste fișierul pe care dorim să îl importăm.
DBMS = identifica tipul de fișier importat.
REPLACE suprascrie un fișier existent.
SHEET = "sheetname" specifica ce foaie ar trebui să importe SAS. Valoarea implicită
este ca SAS să citească prima foaie. Numele foilor pot avea numai 31 de caractere.
GETNAMES = YES (implicit YES) SAS va utiliza automat primul rând de date ca
nume de variabile. Dacă primul rând al foii dvs. nu conține nume de variabile, utilizați
GETNAMES = NO.

Exportul unui fisier SAS in Excel


PROC EXPORT DATA=nume_fisier_SAS
OUTFILE=cale si nume fisier.xlsx'
DBMS = xlsx
REPLACE;
RUN;

1
II.6. Declaraţii şi proceduri uzuale
Declaraţia LIBNAME furnizează produsului SAS un pointer către o locaţie de memorie a
sistemului de operare unde sunt stocate fişiere SAS. Dacă datele sunt rezidente pe un
sistem de operare Windows, declaraţia LIBNAME referă un director în care sunt stocate
datele. De exemplu: LIBNAME date 'E:\date sas';
Declaraţia TITLE, Permite introducerea titlului unui raport. Titlul, plasat între ghilimele
simple sau duble, va fi afişat la începutul fiecărei pagini de rezultate SAS. Declaraţia
TITLE este o declaraţie globală, ceea ce înseamnă că efectul ei nu se reduce la secţiunea
din care ea face parte, ci se propagă în întreg mediul SAS până când el va fi schimbat
prin intermediul altei declaraţii TITLE. În acest context este bine să se plaseze o
declaraţie TITLE înaintea fiecărei proceduri care va produce ieşiri pentru a uşura citirea
şi înţelegerea informaţiilor din pagină. Când se iese din sesiunea de lucru SAS, titlurile se
resetează şi este nevoie să se introducă noi declaraţii TITLE, dacă ele sunt necesare.
De exemplu: TITLE 'Analiza comenzi‘;
PROC PRINT reprezintă numele unei secţiuni de procedură care listează conţinutul unui
set de date SAS Procedura conţine mai multe opţiuni sau declaraţii care au următoarele
semnificaţii:
 opţiunea DATA - defineşte tabela SAS care se va fi utilizată în prelucrare;
 opţiunea OBS - defineşte o etichetă pentru numărul observaţiei din cadrul coloanei
(în cazul în care acest număr va fi afişat);
 opţiunea LABEL - utilizează în raport etichetele variabilelor în locul numelor lor;
 declaraţia VAR - indică numele variabilelor utilizate în procedură;
 declaraţia BY - indică numele variabilei de grupare;
 declaraţia RUN - încheie secţiunea PROC PRINT.
De exemplu:
LIBNAME date 'E:\date sas';
DATA date.comenzi;
INFILE 'E:\date sas\comenzi.txt';
INPUT Nr_Comanda $ 1-5 Cod_Produs $ 2-10
Cantitate $ 13-15 Pret 17-22 Venit $ 25-32;
RUN;
PROC PRINT data= date.comenzi;
OBS – “NrCrt”;
LABEL;
VAR Cod_Produs Cantitate;

2
RUN;

PROC CONTENTS afişează descrierea datelor, în timp ce PROC PRINT afişează


datele propriu-zise, de exemplu:
TITLE "Descrierea datelor din fişieul produse";
PROC CONTENTS DATA=lib_prod.produse;
RUN;
Rezultatul executării acestui cod constă într-un raport ce conţine numărul de variabile şi
de observaţii, numele, tipul şi dimensiunile variabilelor şi alte informaţii referitoare la
setul de date din fişier.

II.7. Procesare iterativă şi condiţională


II.7.1. Clauzele WHERE, IF şi SELECT

II.7.1.1. Clauza WHERE


SAS permite utilizarea următorilor operatori de comparaţie: EQ (egal cu), NE (diferit de),
LT (mai mic), LE (mai mic sau egal), GT (mai mare), GE (mai mare sau egal), IN (indică
apartenenţa la o listă de valori) şi a operatorilor logici: AND, OR, NOT. Operatorii SAS ce

3
pot fi utilizaţi împreună cu clauza WHERE sunt: IS MISSING (verifică dacă este o
valoare lipsă), IS NULL (verifică dacă este o valoare nulă), BETWEEN … AND …
(indică apartenenţa la un interval de valori), CONTAINS (găseşte un subşir), LIKE
(compară cu un şablon).
Pentru exemplificarea modului de utilizare al clauzei WHERE se va considera, în
continuare, un exemplu prin care se va realiza şi afişa un set de date temporar numit
Angajaţi (figura IV.6.25.), având variabilele: nume, vârstă, sex şi salariu, după care se vor
afişa doar angajaţii de sex masculin care au salariul peste 2500 (figura IV.6.26.).
DATA Angajati;
LENGTH Sex $ 1;
LENGTH Nume $ 20;
INPUT Nume Varsta Sex Salariu;
DATALINES;
Ionescu 33 M 2100
Vasilescu . F 2300
Pop 35 M 2600
Andreescu 48 F 2800
Anton 59 F 3100
Popescu 24 M 2200
Chirita 60 F 3600
Popovici . M 2800
Marin 35 F 3150
Barbulescu 49 M 3200;
TITLE "Date angajati";
PROC PRINT DATA=Angajati noobs;
RUN;

Obs. Noobs nu afişează numărul curent al înregistrărilor din setul de date.

Figura IV.6.25. Raport procedura PRINT pentru setul de date Angajaţi

TITLE "Angajaţi de sex masculin cu salariul mai mare decât 2500";

4
PROC PRINT DATA=work.angajati;
WHERE Sex eq 'M' and
Salariu GE 2500;
VAR Nume Varsta Sex Salariu;
RUN;

Figura IV.6.26. Raport Angajaţi cu instrucţiunea WHERE

II.7.1.2. Clauza IF
Sintaxa
 If conditie THEN actiune;
sau
 IF conditie THEN actiune1
ELSE actiune2;

Atunci când expresia logică este evaluată ca fiind adevărată, se execută instrucţiunile ce
urmează cuvântului cheie THEN. Dacă expresia nu este adevărată, programul continuă să
proceseze următoarele instrucţiuni, sau ramura ELSE dacă aceasta există.
Atenţie! Valorile numerice lipsă sunt tratate logic ca cel mai negativ număr ce poate fi
referit, astfel încât atunci când o astfel de valoare este testată într-o expresie IF,
programul va evalua rezultatul testării ca fiind TRUE.
Atunci când se doreşte verificarea mai multor condiţii printr-o succesiune de clauze IF
este recomandată utilizarea variantei IF...ELSE...IF. Acest lucru duce la o evaluare mai
eficientă a programului, deoarece SAS nu mai testează condiţiile ELSE rămase atunci
când identifică o ramură IF a cărei condiţie este evaluată ca adevărată.

Pentru exemplificarea modului de utilizare al clauzei IF, se va folosi setul de date creat în
exemplul anterior, se va crea o nouă variabilă care va indica grupa de vârstă a angajaţilor

5
(figura IV.6.27.) după care se vor afişa exclusiv datele angajaţilor de sex feminin al căror
salariu este peste 3000 (figura IV.6.28.).
DATA Angajati;
LENGTH Sex $ 1;
LENGTH Nume $ 20;
INPUT Nume Varsta Sex Salariu;
IF Varsta LT 25 AND NOT MISSING(Varsta)
THEN GrupaVarsta = 1;
ELSE
IF Varsta GE 25 AND Varsta LT 40
THEN GrupaVarsta = 2;
ELSE
IF Varsta GE 40 AND Varsta LT 60
THEN GrupaVarsta = 3;
ELSE
IF Varsta GE 60
THEN GrupaVarsta = 4;
DATALINES;
Ionescu 33 M 2100
Vasilescu . F 2300
Pop 35 M 2600
Andreescu 48 F 2800
Anton 59 F 3100
Popescu 24 M 2200
Chirita 60 F 3600
Popovici . M 2800
Marin 35 F 3150
Barbulescu 49 M 3200
;
TITLE "Date Angajaţi";
PROC PRINT DATA=Angajati noobs;
RUN;

Figura IV.6.27. Raport Angajaţi ce include grupa de vârstă

6
Datele angajaţilor de sex feminin al căror salariu este peste 3000 vor fi afişate prin
intermediul programului de mai jos.
DATA Angajate;
LENGTH Sex $ 1;
LENGTH Nume $ 20;
INPUT Nume Varsta Sex Salariu;
IF Sex EQ 'F' AND Salariu GT 3000;
DATALINES;
Ionescu 33 M 2100
Vasilescu . F 2300
Pop 35 M 2600
Andreescu 48 F 2800
Anton 59 F 3100
Popescu 24 M 2200
Chirita 60 F 3600
Popovici . M 2800
Marin 35 F 3150
Barbulescu 49 M 3200
;
TITLE "Date Angajate";
PROC PRINT DATA=Angajate;
RUN;

Figura IV.6.28. Raport Angajate utilizând instrucţiunea IF

Selectarea observaţiilor

Dacă se doreşte extragerea unui subset de date dintr-un fişier de date sau dintr-un set de
date SAS existent, se poate utiliza o formă specială a instrucţiunii IF care permite
preluarea exclusiv a acelor rânduri din setul iniţial care îndeplinesc o condiţie specificată.

Sintaxa:

7
IF conditie; /*Atentie! Lipseşte Then*/
unde ‘conditie’ este o expresie SAS.
Dacă condiţia este adevărată, pasul ‘DATA’ continuă să proceseze observaţia.
Dacă condiţia este falsă nu se mai procesează nimic, controlul revenind la începutul
pasului ‘DATA’ pentru procesarea următorului rând.

Exemplu: Să se afişeze exclusiv datele studenţilor de sex feminin.

data Femei;
length Sex $ 1;
input Varsta Sex Proiect Activitate Examen;
if Sex eq 'F';
datalines;
21 M 8 9 8
.F999
35 M 8 8 8
48 F . . 7
59 F 9 7 9
15 M 8 . 9
67 F 9 8 9
.M676
35 F 7 7 8
49 M 5 5 8
;
title "Date studente";
proc print data=Femei;
run;
Dacă valoarea variabilei Sex este ‘F’, atunci se ajunge la finalul pasului DATA şi are loc
un output automat, dacă valoarea este diferită de ‘F’, se revine la inceputul pasului
DATA.
La crearea de noi variabile pornind de la expresii condiţionale, SAS stabileşte lăţimea
noii variabile în funcţie valoarea primei observaţii din tabelul rezultat.

A alege între WHERE sau IF pentru selectarea înregistrărilor


Ambele intrucţiuni WHERE şi IF se pot folosi pentru a selecta înregistrările care vor fi
incluse în noul set de date. Fiecare dintre acestea are însă anumite limite în utilizare, şi
anume:
- în secţiunile de proceduri se foloseşte numai instrucţiunea WHERE, nu şi IF;

8
- dacă WHERE se foloseşte în cadrul secţiunii de date, atunci expresiile sale
condiţionale trebuie să refere numai variabile din setul de date de intrare;
- WHERE nu poate folosi în expresii condiţionale bazate pe variabile create în
secţiunea de date prin declaraţii de atribuire.

II.7.1.3. Clauza SELECT


Sintaxa clauzei SELECT este următoarea:
SELECT (expresie de selecţie);
WHEN (expresie_WHEN1) rezultat 1;
WHEN (expresie_WHEN2) rezultat 2;

OTHERWISE rezultat_implicit;
END;
Pentru a exemplifica utilizarea clauzei SELECT se va rezolva cerinţa din exemplul
precedent utilizând în locul clauzei IF clauza SELECT (figura IV.6.29.).
DATA Angajati;
LENGTH Sex $ 1;
LENGTH Nume $ 20;
INPUT Nume Varsta Sex Salariu;
SELECT;
WHEN (MISSING(Varsta)) GrupaVarsta= . ;
WHEN (Varsta LT 25) GrupaVarsta=1;
WHEN (Varsta LT 40) GrupaVarsta=2;
WHEN (Varsta LT 60) GrupaVarsta=3;
OTHERWISE GrupaVarsta=4;
END;
DATALINES;
Ionescu 33 M 2100
Vasilescu . F 2300
Pop 35 M 2600
Andreescu 48 F 2800
Anton 59 F 3100
Popescu 24 M 2200
Chirita 60 F 3600
Popovici . M 2800
Marin 35 F 3150
Barbulescu 49 M 3200
;

9
TITLE "Date angajaţi cu instrucţiunea SELECT";
PROC PRINT DATA=Angajati;
RUN;

Figura IV.6.29. Raport Angajaţi utilizând instrucţiunea SELECT

II.7.2. Clauzele DO, DO cu un număr cunoscut de iteraţii, DO WHILE şi


DO UNTIL

Clauza DO
Sintaxa clauzei DO este următoarea:
DO
Instrucţiune 1;
Instrucţiune 2;
...
Instrucţiune n;
END;
Pentru a exemplifica modul de utilizare al acestei clauze se va realiza un program SAS
care va calcula salariul majorat astfel: dacă vârsta este mai mică sau egală cu 39, salariul
este majorat cu 15%, iar dacă vârsta este mai mare decât 39, salariul este majorat cu 10%.
Dacă vârsta lipseşte, se va elimina înregistrarea (figura IV.6.30.).

DATA Salarii;
LENGTH Sex $ 1
Nume $ 20;

10
INPUT Nume Varsta Sex Salariu;
IF MISSING(Varsta) THEN DELETE;
IF Varsta LE 39 then
DO;
Salariu = 1.15*Salariu;
END;
ELSE IF Varsta gt 39 then
DO;
Salariu = 1.1*Salariu;
END;
DATALINES;
Ionescu 33 M 2100
Vasilescu . F 2300
Pop 35 M 2600
Andreescu 48 F 2800
Anton 59 F 3100
Popescu 24 M 2200
Chirita 60 F 3600
Popovici . M 2800
Marin 35 F 3150
Barbulescu 49 M 3200
;
RUN;
TITLE "Raportul Salariilor Majorate";
PROC PRINT DATA=Salarii noobs;
RUN;

11
Figura IV.6.30. Raport Angajaţi utilizând instrucţiunea DO pentru a majora
salariul

Operaţia de adunare - Sintaxa pemtru această operaţie este: variabilă + increment. În


exemplul următor se va calcula salariul cumulat al angajaţilor, cumulând salariile
anterioare, astfel că în final să se obţină suma totală a salariilor (figura IV.6.31.).
DATA Suma_sal;
LENGTH Sex $ 1
Nume $ 20;
INPUT Nume Varsta Sex Salariu;
Suma_sal + Salariu;
DATALINES;
Ionescu 33 M 2100
Vasilescu . F 2300
Pop 35 M 2600
Andreescu 48 F 2800
Anton 59 F 3100
Popescu 24 M 2200
Chir6ita 60 F 3600
Popovici . M 2800
Marin 35 F 3150
Barbulescu 49 M 3200
;
TITLE "Suma salarii ";
PROC PRINT DATA=Suma_sal noobs;
RUN;

Figura IV.6.31. Raport salarii cumulate

Clauza DO cu un număr cunoscut de iteraţii


Sintaxa clauzei DO cu un număr cunoscut de iteraţii este:

12
DO contor=val_start to val_stop by icrement;
Set_instrucţiuni;
END;
Programul următor va calcula salariul de care va dispune angajatul la finalul a cinci ani,
plecând de la un salariu iniţial de 2100 cu o creştere anuală de 5% (figura IV.6.32.), unde
comanda OUTPUT determină scrierea valorii calculate în setul de date de ieşire.
DATA Calc_sal;
Crestere_an = .05;
Sal = 2100;
DO An = 1 to 5;
Sal + Crestere_an* Sal;
OUTPUT;
END;
RUN;
TITLE "Evoluţie salariu";
PROC PRINT DATA=Calc_sal noobs;
RUN;

Figura IV.6.32. Raport evoluţie salariu

Clauzele DO WHILE şi DO UNTIL


Sintaxele clauzelor DO WHILE şi DO UNTIL sunt:
DO WHILE condiţie
Set_instrucţiuni;
END;

DO UNTIL (condiţie)
Set_instrucţiuni;
END;
Ca exemplu de utilizare al acestor clauze se va realiza un program care va calcula
număril de ani necesari pentru a obţtine un salariu de 3800, ştiind că angajatul cu un
salariu iniţial de 2100 poate beneficia de o crestere anuală de 10% (figura IV.6.33.).

13
Cu ajutorul clauzei DO UNTIL
DATA Calcul_ani;
Crestere_an = 0.1;
Sal = 2100;
DO UNTIL (Sal GE 3800);
An + 1;
Sal = Sal + Crestere_an*Sal;
OUTPUT;
END;
RUN;
TITLE "Calcul perioadă";
PROC PRINT DATA= Calcul_ani noobs;
RUN;

Cu ajutorul clauzei DO UNTIL


DATA Calcul_ani;
Crestere_an = 0.1;
Sal = 2100;
DO WHILE (Sal LE 3800);
An + 1;
Sal = Sal + Crestere_an*Sal;
OUTPUT;
END;
RUN;
TITLE "Calcul perioadă";
PROC PRINT DATA= Calcul_ani noobs;
RUN;

14
Figura IV.6.28. Raport calcul perioadă

II.8. Manipularea datelor prin funcţii SAS


II.8.1. Funcţii care rotunjesc şi trunchiază valori numerice

Functia INT calculeaza partea intreaga dintr-un numar: INT(argument)


Functia ROUND rotunjeste pana la cea mai apropiata unitate: ROUND(argument,
zecimale)
Valoarea implicita pentru numărul de zecimale este 1
Exemplu:
DATA trunchere;
INPUT Varsta Greutate;
Varsta= int(Varsta);
GreutateKg = round(2.2*Greutate,.1);
Greutate= round(Greutate);
DATALINES;
18.8 100.7
25.12 122.4
64.99 188
;
RUN;

Funcţia ROUND este utilizată de două ori în acest program. Când este folosită pentru a
rotunji valorile GreutateKg, are două argumente, separate de virgulă. Primul argument
este valoarea care trebuie rotunjită; al doilea argument este numărul de zecimale. Valorile
tipice pentru numărul de zecimale sunt .1, .01, .001 şi aşa mai departe. Cu toate acestea,
se pot utiliza şi alte valori. Când se utilizează ROUND cu variabila Greutate, nu există un
al doilea argument. Prin urmare, acţiunea implicită – rotunjeşte la cel mai apropiat număr
întreg. Iată o listă a setului de date care rezultă:

Listing of TRUNCHERE

Varsta Greutate GreutateKg


18 101 221.5
25 122 269.3
64 188 413.6

Se poate observa că partea fracţionară a tuturor valorilor de vârstă a fost abandonată şi că


valorile GreutateKg sunt rotunjite la cea mai apropiată valoare de 10 iar valoarea

15
Greutate la cel mai apropiat număr întreg. În acest program, a fost important să se
calculeze valoarea lui GreutateKg înainte ca Greutatea să fie rotunjită.

II.8.2. Funcţii care lucrează cu valori lipsă

În SAS, o valoare numerică lipsă poate fi referită cu . (de exemplu IF salariu = . then
situatie = “absent”) iar o valoare de tip caracter lipsă printr-un spaţiu între ’ ‘ sau “ “.
Testarea valorilor lipsă numerice se face prin funcţia IS NULL iar a valorilor lipsa de tip
character prin funcţia IS MISSING (de exemplu IF salariu IS NULL then situatie =
“absent”).

Iniţializarea variabilelor de tip character sau numeric - Rutina CALL MISSING

Rutina CALL MISSING este un mod la îndemână de a seta unul sau mai multe variabile
numerice şi / sau variabile numerice care lipsesc. Când se utilizează o listă de variabile,
cum ar fi X1-X10 sau Char1-Char5, trebuie ca lista să fie precedeată de cuvântul cheie
OF, altfel semnul – va fi interpretat ca scădere şi nu interval. Aici sunt cateva exemple:
CALL MISSING(X,Y,Z,OF A1–A10); X, Y şi Z sunt numerice şi A1-A10
sunt de tip caracter. X, Y şi Z sunt setate la
o valoare lipsă numerică; A1-A10 sunt
setate la o valoare lipsă de tipcaracter.
CALL MISSING(OF X1–X10); X1-X10 sunt numerice şi sunt setate la o
valoare lipsă numerică.
CALL MISSING(OF _ALL_); Toate variabilele definite până la punctul
de apel al funcţiei sunt setate ca lipsă.
CALL MISSING(OF X1–X5,OF Y1–Y5); X1-X5 şi Y1-Y5 sunt numerice şi sunt
setate la o valoare lipsă numerică.

II.8.3. Funcţii statistice descriptive – funcţiile N, MEAN, MIN, MAX

Funcţia N returnează numărul de valori numerice care nu sunt valori lipsă dintre
argumentele sale. Ca în cazul tuturor funcțiilor din această categorie, trebuie să precedaţi
orice listă de variabile în formularul Var1-Varn cu cuvântul cheie OF. Fără aceasta, SAS
presupune că doriți să scăpați cele două valori

Exemplu: se doreste realizarea analizei notelor de la test ale studentilor la primele 10


intrebari (etichetate Q1-Q10) realizand media lor mumai daca exista 7 sau mai multe

16
intrebari la care raspunsurile au fost notate (ale căror valori nu lipsesc). În plus, se doreşte
să se identifice care dintre întrebări au avut vel mai mare, respective cel mai mic scor.
data test;
input ID $ Q1-Q10;
if n(of Q1-Q10) ge 7 then Scor = mean(of Q1-Q10);
MaxScore = max(of Q1-Q10);
MinScore = min(of Q1-Q10);
datalines;
001 4 1 3 9 1 2 3 5 . 3
002 3 5 4 2 . . . 2 4 .
003 9 8 7 6 5 4 3 2 1 5;
run;

Ca în cazul tuturor funcțiilor din această categorie, trebuie să precedați orice listă de
variabile în formularul Var1-Varn cu cuvântul cheie OF. Fără aceasta, SAS presupune că
doriți să scădeti cele două valori.

Funcția MEAN, precum și celelalte funcții discutate în această secțiune, ignoră valorile
lipsă. De exemplu, subiectul 001 are nouă valori non-lipsite, astfel încât media se
calculează prin adăugarea celor nouă valori și împărțind cu 9.
Functiile MAX si MIN returneaza valoarea cea mai mare si cea mai mica (pentru valorile
care nu lipsesc) a argumentelor sale
Rezultatul programului va fi:

Max Min
ID Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q10 Score Score Score
001 4 1 3 9 1 2 3 5 . 3 3.44444 9 1
002 3 5 4 2 . . . 2 4 . . 5 2
003 9 8 7 6 5 4 3 2 1 5 5.00000 9 1

O altă funcție similară funcției N este NMISS. Această funcție returnează numărul de
valori lipsă din lista de variabile.
Funcția LARGEST permite să extragerea celei mai mari n valori dintr-o listă de
variabile.
De exemplu, pentru a găsi suma celor mai mari trei scoruri din setul de date Psih, puteți
utiliza funcțiile SUM și LARGEST împreună, astfel:
Sumatrei = sum(largest(1,of Q1-Q10),largest(2,of Q1-Q10),largest(3,of Q1-Q10));
Unde 1 oferă cea mai mare valoare, 2 oferă a doua cea mai mare rtc.
Această funcție ignoră valorile lipsă, la fel ca celelalte funcții statistice descriptive.

17
LARGEST (1, listă variabile) este identică cu MAX (listă variabile).
SMALLEST (1, listă variabile) vă oferă cea mai mică valoare într-o listă de variabile
(egală cu rezultatul funcției MIN); SMALLEST (2, listă variabile) vă oferă cea de-a doua
valoare mai mică și așa mai departe.
O modalitate de a calcula suma mai multor variabile este de a scrie o instrucţiune de
forma: Sumavar = var1 + var2 + var3; dar dacă una fintre variabile conţine o valoare
lipsa suma rezultată va fi tot o valoare lipsa. Dacă se doreşte să se ignore valorile lipsă fie
se foloseşte o instrucţiune logică pentru a verifica existenţa valorii lipsă, fie se urilizează
funcţia SUM: Sumvar = sum(of var1–var3); Dacă una sau două valori lipsesc, Sumvar va
fi suma valorilor care nu lipsesc. Dacă toate cele trei valori lipsesc, funcția SUM
returnează o valoare lipsă. Dacă se doreşte ca, dacă toate argumentele lipsesc, suma să fie
0, se include un 0 în lista de argumente: Sumvar = sum (0, of var1-var3);

18
Exemplu
Tip
Funcţie Sintaxă Dat Rezul Explicaţii
funcţii Instrucţiune
e tat
Rotunjeste o valoare numeric la un anumit număr de zecimale
Greutate=round(G 100 Argument1
101 reprezintă
reutate); .7
valoarea care
trebuie
rotunjită.
Funcţii Argument2
care reprezintă
ROUND ROUND(argum numărul de
rotunjes ent1, GreutateKg
c şi =round(2.2*Greut 100 zecimale.
.argument2) 221.5 Dacă nu există
trunchia ate,.1); .7
ză argumentul 2
valori implicit se
numeric rotunjeşte la
e cel mai
apropiat număr
întreg
Returnează partea intreagă dintr-un număr zecimal
Dacă vârsta
INT Varsta= 18. este de 18ani şi
INT(argument) 18
int(Varsta); 8 8 luni funcţia
va returna 18
În SAS, o valoare numerică lipsă poate fi referită cu . (de exemplu IF salariu = . then
situatie = “absent”) iar o valoare de tip caracter lipsă printr-un spaţiu între ’ ‘ sau “ “.
Testarea valorilor lipsă numerice se face prin funcţia IS NULL iar a valorilor lipsa de
Funcţii tip character prin funcţia IS MISSING (de exemplu IF salariu IS NULL then situatie
care
lucreaz = “absent”).
ă cu Rutina CALL MISSING este un mod de a seta una sau mai multe
valori variabile numerice şi / sau variabile numerice care lipsesc. Când se
lipsă -
Iniţializ utilizează o listă de variabile, cum ar fi X1-X10 sau Char1-Char5, trebuie
area ca lista să fie precedeată de cuvântul cheie OF, altfel semnul – va fi
variabil interpretat ca scădere şi nu interval.
elor de CALL
MISSIN X, Y şi Z sunt
tip
G numerice şi
charact
A1-A10 sunt
er sau CALL
CALL MISSING(X,Y,Z,OF A1– de tip caracter.
numeric MISSING(listă
A10); X, Y şi Z sunt
argumente)
setate la o
valoare lipsă
numerică; A1-

19
A10 sunt
setate la o
valoare lipsă de
tipcaracter.
X1-X10 sunt
numerice şi
CALL MISSING(OF X1–X10); sunt setate la o
valoare lipsă
numerică.
Toate
variabilele
definite până la
CALL MISSING(OF _ALL_);
punctul de apel
al funcţiei sunt
setate ca lipsă.
X1-X5 şi Y1-
Y5 sunt
CALL MISSING(OF X1–X5,OF numerice şi
Y1–Y5); sunt setate la o
valoare lipsă
numerică.
Funcţia N returnează numărul de valori numerice care
nu sunt valori lipsă dintre argumentele sale
N
N(listă n(of Q1- 4139123
9
argumente) Q10) 5.3

Funcţia NMISS returnează numărul de valori numerice


care nu sunt valori lipsă dintre argumentele sale – este
Funcţii
NMISS similar cu funcţia N
statistic
NMISS (listă nmiss(of Q1- 4 1 3 9 1 2 3
e 9
argumente) Q10) 5.3
descript
Funcţia MEAN returnează media valorilor non-lipsa
ive
din lista argumentelor
MEAN
Funcţii MEAN(listă mean(of 4 1 3 9 1 2 3 3.444
le argumente) Q1-Q10) 5.3 44
ignoră Functia MAX returneaza valoarea cea mai mare si cea
valorile mai mica (pentru valorile care nu lipsesc) a
lipsă MAX argumentelor sale
MAX(listă max(of Q1- 4 1 3 9 1 2 3
9
argumente) Q10) 5.3
Functia MIN returneaza valoarea cea mai mica (pentru
valorile care nu lipsesc) a argumentelor sale
MIN
MIN(listă min(of Q1- 4139123
1
argumente) Q10) 5.3

20
Funcţia LARGEST permite să extragerea celei mai
mari n valori dintr-o listă de variabile.
Returnea
Largest ză cea
4139123
(1,of Q1- 9 mai mare
5.3
Q10) valoare
din listă
LARGE
Returnea
ST
LARGE ză a doua
(argume Largest
ST 4139123 cea mai
nt1, listă (2,of Q1- 5
5.3 mare
sau Q10)
valoare
interval
din listă
argumen
Returnea
te)
ză a treia
Largest
4139123 cea mai
(3,of Q1- 4
5.3 mare
Q10)
valoare
din listă
Returnea
Smallest ză cea
4139123
(1,of Q1- 1 mai mică
5.3
Q10) valoare
din listă
SMALL
Returnea
EST
ză a doua
(argume Smallest
4139123 cea mai
SMALL nt1, listă (2,of Q1- 2
5.3 mică
EST sau Q10)
valoare
interval
din listă
argumen
Returnea
te)
ză a treia
Smallest
4139123 cea mai
(3,of Q1- 3
5.3 mică
Q10)
valoare
din listă
Sum(var1 Dacă una
var,2,var3 sau două
SUM(list 6
) 10 20 30 valori
ă 0
Sum(of lipsesc,
argumen
var1-var3) funcţia
SUM te) sau
Sum(of 4 va
SUM(int 10 . 30
var1-var3) 0 returna
erval de
suma
valori) Sum(of
... . valorilor
var1-var3) care nu
21
lipsesc;
dacă
toate
valorile
lipsesc,
va
returnao
valoare
lipsă.
Dacă se doreşte ca, în caz
Sum (0, că toate argumentele
of var1- 0... 0 lipsesc, rezultatul returnat
var3) să fie 0, se include un 0 în
lista de argumente
Returnează
ABS(argu
ABS ABS(x) -2 2 valoarea absolută a
ment)
valorii variabilei
SQRT 2 1.4142 Returnează
SQRT (argumen SQRT(x) rădăcina pătrată a
-2 .
t) valorii variabilei
2 7.39 Funcția EXP ridică
EXP
e (baza logaritmilor
Funcţii EXP (argumen EXP(x)
-2 0.14 naturali) la valoarea
matema t)
argumentului său.
tice
Funcția LOG
2 0.69315 returnează
logaritmul natural
LOG
al argumentului
LOG (argumen LOG (x)
său. (Dacă aveți
t) -2 . nevoie de un jurnal
de bază 10, utilizați
funcția LOG10.)
Functii SAS poate citi datele în aproape orice formă, dar nu stochează în mod normal date
pentru într-una din aceste formate - convertește toate aceste date într-un singur număr -
valori numărul de zile de la 1 ianuarie 1960. Perioada după 1 ianuarie 1960 este în numere
de tip întregi pozitive; date înainte de 1 ianuarie 1960 sunt cifre negative
data Functia mdy
creeaza o data de
tip SAS din valori
numerice care
data=mdy
mdy(mon Ianuarie, reprezintă luna,
MDY (mon,day, 1 13 2001
,day,year 13, 2001 ziua si anul:
year);
mdy(luna, zi, an)
unde
luna reprezinta luna
sau un numar intre

22
1-12; ziua
reprezinta ziua sau
un numar de la 1-
31si anul
reprezinta anul sau
un numar cu 2 sau
4cifre.
Datacuren Returnează data
TODAY
today() ta curenta in format
=today(); SAS. Funcția
Datacuren DATE() efectuează
DATE Date() ta o activitate identică
=date(); cu funcția TODAY
Returnează ora
Oracurent
TIME Time() curenta in format
a =time();
SAS.
Functia DAY
returneaza
ziua din data SAS
Ziua=
pe care o are ca
DAY(dat DAY
DAY argument.
e) (DataAng
Unde “date” este o
ajare)
data calendaristica
in format SAS sau o
constanta SAS
Functia QTR
returneaza
trimestrul din data
Trimestrul
SAS pe care o are
QTR(dat = QTR
QTR ca argument.
e) (DataAng
Unde “date” este o
ajare)
data calendaristica
in format SAS sau o
constanta SAS
Functia MONTH
returneaza
luna din data SAS
Luna=mo pe care o are ca
MONTH
MONTH nth(DataA argument.
(date)
ngajare) Unde “date” este o
data calendaristica
in format SAS sau o
constanta SAS
an=YEA Functia YEAR
YEAR(d
YEAR R(DataAn returneaza anul din
ate)
gajare) data SAS pe care o

23
are ca argument.
Unde “date” este o
data calendaristica
in format SAS sau o
constanta SAS
Funcția LENGTH
returnează
lungimea unei
LENGT LENGTH lengthn(
Popescu 7 variabile de tip
H (var) Nume)
caracter, fără să
numere spațiile
libere
Funcția UPCASE
UPCAS UPCASE UPCASE POPESC convertește toate
popescu
E (var) (nume) U literele la litere
mari
PROPCASE,
transform în
majusculă prima
literă a fiecărui
cuvânt și
convertește literele
Funcţii
rămase în litere
pentru
mici. Prin cuvânt se
variabil
înțelege orice literă
e de tip
consecutivă
caracter PROPCA
PROPCA PROPCA separată de un
SE popescu Popescu
SE SE (var) delimitator.
(nume)
Delimitatoarele
implicite sunt
spaţiu, slash,
liniută, paranteză
deschisă, pounct și
tab. E pot specifica
delimitatorii ca un
al doilea argument
opțional funcției
PROPCASE
Funcția LOWCASE
LOWCAS lowcase( lowcase(n
E
POPESCU popescu convertește toate
var) ume)
literele la litere mici
Functia SCAN separa un sir de caractere in cuvinte si returneaza un
SCAN
cuvant specificat.

24
Argument - sirul
de caractere de
scanat;
N - specifica al
catelea cuvant sa fie
citit;
Delimitatori - lista
de caractere in
ghilimele.
Delimitatorii
scan(argu
Prenume= impliciti sunt blank
ment, n,
scan(num Popescu Ion Ion .< ( + | & ! $ *
delimitator
i) e,2,’ ‘) ) ; ˆ - / , %
Functia scan
atribuie noilor
variabile lungimea
200. Pentru a se
atribui lungimea
potrivita fiecarei
noi variabile create,
se foloseste length
inainte de prima
crearea lor
Functia substr se poate folosi pentru a:
 extrage o portiune dintr-un sir de caractere;
 înlocui din continutul unui sir de caractere.
Argument - este sirul de variabile dat;
pozitie - este pozitia din sir de unde se incepe;
n - specifica numarul de caractere de extras; daca n este omis, se vor
extrage toate caracterele pana la sfarsit
Asezata in dreapta
SUBSTR Initiala=s
semnului =
ubstr(nu PopescuNIon N
returneaza subsirul
Substr me,8,1);
extras;
(argumen
Asezata in stanga
t,pozitie,<
substr(tes semnului = se
n>)
t,4,2)=’92 S7381K2 S7392K2 foloseste pentru a
’; inlocui caractere
din sir:
Functia trim inlatura spatiile in plus de la capatul sirului de caractere
acolo unde e cazul.
Argument - poate
TRIM trim sa fie o variabila de
trim(addre
(argumen tip caracter sau o
ss)
t) alta functie care
returneaza valoare

25
de tip caracter.

Functia index permite cautarea pozitia unui caracter intr-un sir si


returneaza prima pozitie pe care il gaseste; daca nu e gasit returneaza 0;
sursa - variabila
sau expresia in care
se cauta;
extras - sirul de
caractere cautat -
intre ghilimele
simple;
Functia face
INDEX INDEX(s diferenta intre
index(insu
ursa,extra 3 majuscule si
mare,’s’
s) minuscule; solutia
ar fi:
index(upcase(job),’
WORD
PROCESSING’)
sau
index(lowcase(job),
’word
processing’)
Functia find cauta un subsir intr-un sir de caractere; returneaza prima
pozitie pe care il gaseste; daca nu il gaseste returneaza 0
String - este sursa
in care se cauta
(constanta caracter,
variabila character
sau expresie)
Substring - este
sirul cautat in string
FIND (constanta caracter,
(string,su find(job,’ variabila character
FIND
bstring,< word sau expresie)
modifiers processin Modifiers -
>,<startp g’,’t’) specifica
os> ) modificatori - unul
sau mai multi din: i
daca se doreste
ignorarea majuscule
/ minuscule si t
daca se doreste
taierea spatiilor de
la sfarsit in string si

26
substr
Startpos - este un
intreg care specifica
pozitia de pe care se
incepe cautarea si
directia cautarii
mplicit se porneste
cautarea de la
stanga spre dreapta,
inceput. Semnul lui
startpos da sensul
cautarii (pozitiv
spre dreapta si
negativ spre
stanga).
Functia tranwrd inlocuieste toate aparitiile unui subsir de caractere cu
altul.
tranwrd target - este
TRANW name=tra
(source, Ion este inlocuit in
RD nwrd(nam
target, inlocuit source, peste tot,
e,’Ion’,’Io
replacem cu Ioan cu replacement
an’)
ent)

27

S-ar putea să vă placă și