Documente Academic
Documente Profesional
Documente Cultură
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;
;
Selectarea observaţiilor
Sintaxa:
IF conditie; • La crearea de noi variabile
pornind de la expresii
unde ‘conditie’ este o expresie SAS condiţionale, SAS stabileşte
data Femei; lăţimea noii variabile în funcţie
length Sex $ 1; valoarea primei observaţii din
input Varsta Sex Proiect Activitate Examen; tabelul rezultat.;
if Sex eq 'F';
datalines; • Alegerea între WHERE
21 M 8 9 8 sau IF pentru selectarea
.F999 înregistrărilor
35 M 8 8 8 – în secţiunile de proceduri se
foloseşte numai instrucţiunea
48 F . . 7 WHERE, nu şi IF;
59 F 9 7 9 – dacă WHERE se foloseşte în
cadrul secţiunii de date,
; atunci expresiile sale
condiţionale trebuie să refere
title "Date studente"; numai variabile din setul de
proc print data=Femei; date de intrare;
– WHERE nu poate folosi în
run; expresii condiţionale bazate
pe variabile create în
secţiunea de date prin
declaraţii de atribuire.
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;
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
;
TITLE "Date angajaţi cu instrucţiunea SELECT";
PROC PRINT DATA=Angajati;
RUN;
Structuri repetitive – Clauza DO
Sintaxa
Do DATALINES;
Instrucţiune 1; Ionescu 33 M 2100
Instrucţiune 2; Vasilescu . F 2300
... Pop 35 M 2600
Andreescu 48 F 2800
Instrucţiune n;
Anton 59 F 3100
End; Popescu 24 M 2200
DATA Salarii; Chirita 60 F 3600
LENGTH Sex $ 1 Popovici . M 2800
Nume $ 20; Marin 35 F 3150
INPUT Nume Varsta Sex Salariu; Barbulescu 49 M 3200
IF MISSING(Varsta) THEN ;
DELETE;
IF Varsta LE 39 then RUN;
DO; TITLE "Raportul Salariilor
Salariu = 1.15*Salariu; Majorate";
END; PROC PRINT DATA=Salarii
ELSE IF Varsta gt 39 then noobs;
DO; RUN;
Salariu = 1.1*Salariu;
END;
Operaţia de adunare
Sintaxa:
variabilă + increment
• Se reţine variabila;
• Variabila este iniţializată cu 0;
• Valorile lipsă (NULL) sunt ignorate.
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;
Structuri repetitive – Clauza DO cu un număr cunoscut de iteraţii
Sintaxa:
DO contor = val_start TO val_stop BY icrement;
Set_instrucţiuni;
END;
Comanda OUTPUT determină scrierea valorii calculate în setul de date de
ieşire.
Exemplu: 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%
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;
Structuri repetitive – Clauzele DO WHILE şi DO UNTIL
DO WHILE condiţie
Set_instrucţiuni;
END;
DO UNTIL (condiţie)
Set_instrucţiuni;
END;
DATA Calcul_ani;
DATA Calcul_ani;
Crestere_an = 0.1; Crestere_an = 0.1;
Sal = 2100; Sal = 2100;
DO WHILE (Sal LE 3800); DO UNTIL (Sal GE 3800);
An + 1; An + 1;
Sal = Sal + Crestere_an*Sal;
Sal = Sal + Crestere_an*Sal;
OUTPUT;
OUTPUT; END;
END; RUN;
RUN; TITLE "Calcul perioadă";
TITLE "Calcul perioadă"; PROC PRINT DATA= Calcul_ani
noobs;
PROC PRINT DATA= Calcul_ani noobs; RUN;
RUN;
II.8. Manipularea datelor prin funcţii SAS
Funcţii care rotunjesc şi trunchiază valori numerice
ROUND(argument1, .argument2)
Greutate=round(Greutate); Date: 100.7 Rezultat: 101 .
GreutateKg =round(2.2*Greutate,.1); Date: 100.7 Rezultat: 221.5
INT(argument)
Varsta= int(Varsta); 18.8 devine 18
N(listă argumente)
N(of Q1-Q10) Date: 4 1 3 9 1 2 3 5 . 3 Rezultat: 9
NMISS (listă argumente)
nmiss(of Q1-Q10) Date: 4 1 3 9 1 2 3 5 . 3 Rezultat: 9
MEAN(listă argumente) - ignoră valorile lipsă
mean(of Q1-Q10) Date: 4 1 3 9 1 2 3 5 . 3 Rezultat: 3.44444
MAX(listă argumente) - ignoră valorile lipsă
max(of Q1-Q10) Date: 4 1 3 9 1 2 3 5 . 3 Rezultat: 9
MIN(listă argumente) - ignoră valorile lipsă
min(of Q1-Q10) Date: 4 1 3 9 1 2 3 5 . 3 Rezultat: 1
LARGEST (argument1, listă sau interval argumente)
Largest (2,of Q1-Q10) Date: 4 1 3 9 1 2 3 5 . 3 Rezultat: 5
SMALLEST (argument1, listă sau interval argumente)
Smallest (2,of Q1-Q10) Date: 4 1 3 9 1 2 3 5 . 3 Rezultat: 2
SUM(listă argumente) sau SUM(interval de valori)
Analizai notelor de la test ale studentilor la primele 10
intrebari (etichetate Q1-Q10) realizand media lor numai
daca exista 7 sau mai multe 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 cel
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;
II.8. Manipularea datelor prin funcţii SAS
Funcţii matematice
ABS(argument)
ABS(x) Date: -2 Rezultat: 2
SQRT (argument)
SQRT(x) Date: 2 Rezultat: 1.4142
Date: -2 Rezultat: .
EXP (argument)
EXP(x) Date: 2 Rezultat: 7.39
Date: -2 Rezultat: 0.14
LOG (argument)
LOG (x) Date: 2 Rezultat: 0.69315
Date: -2 Rezultat: .
Funcţii pentru pentru valori de tip data
SAS poate citi datele în aproape orice formă, dar nu stochează în mod normal
date într-una din aceste formate - convertește toate aceste date într-un
singur număr - numărul de zile de la 1 ianuarie 1960. Perioada după 1
ianuarie 1960 este în numere întregi pozitive; date înainte de 1 ianuarie
1960 sunt cifre negative
mdy(mon,day,year)
data=mdy(mon,day,year); Date: 1 13 2001 Rezultat: Ianuarie, 13, 2001
today()
Datacurenta =today();
Date()
Datacurenta =date();
Time()
Oracurenta =tyme();
DAY(data)
Ziua= DAY (DataAngajare)
QTR(data)
Trimestrul= QTR (DataAngajare)
MONTH (data)
Luna=month(DataAngajare)
YEAR(data)
an=YEAR(DataAngajare)
Funcţii pentru variabile de tip caracter
LENGTH(var)
lengthn(Nume) Popescu 7
UPCASE(var)
UPCASE (nume) popescu POPESCU
PROPCASE (var)
PROPCASE (nume) popescu Popescu
LOWCASE(var)
lowcase(nume) POPESCU popescu
SCAN(argument, n, delimitatori)
Prenume=scan(nume,2,’ ‘) Popescu Ion Ion
SUBSTR (argument,pozitie,<n>)
Asezata in dreapta semnului = returneaza subsirul extras;
Initiala=substr(nume,8,1); PopescuNIon N
Asezata in stanga semnului = se foloseste pentru a inlocui caractere din sir:
substr(test,4,2)=’92’;S7381K2S7392K2
TRIM (argument)
FIND (string,substring,<modifiers>,<startpos> )
INDEX(sursa,extras)
tranwrd (source, target, replacement)