Sunteți pe pagina 1din 24

II.

Pachete software integrate –


SAS
Ptof.Dr. Adina Uta
II.9. Subseturi şi conbinarea seturilor de date SAS
Partajarea unui set de date SAS

• Selectarea observațiilor dintr-un set de date prin definirea criteriilor de


selecție - prin WHERE sau IF
DATA femei;
SET exemple.sondaj;
WHERE gen = 'F';
RUN;
• opțiune DROP = set de date sau KEEP = set de date
DATA femei;
SET exemple.sondaj (DROP=Salariu);
WHERE gen = 'F';
RUN;

Crearea mai multor subset-uri de date SAS într-un singur DATA Step
DATA barbati femei;
SET exemple.sondaj;
IF gen = 'F' THEN OUTPUT femei;
ELSE if gen = 'M' THEN OUTPUT barbati;
RUN;
• instrucțiunea OUTPUT
II.9.3. Combinarea de tabele SAS
Conbinarea Unu la Unu

DATA tabela-rez;
SET tabela-1;
SET tabela-2;
RUN;
II.9.3. Combinarea de tabele SAS
Concatenarea
Tabelele nu au aceiaşi structura
DATA concat;
SET A B;
RUN;

Tabelele au aceiaşi structura


II.9.3. Combinarea de tabele SAS
Intercalarea seturilor de date PROC SORT DATA= Tabela1;
BY Id;
DATA tabela­_rez; RUN;
SET Tabela1 Tabela2; PROC SORT DATA= Tabela2;
BY variabla(le); BY Id;
RUN;
RUN;
DATA tabela_rez;
SET Tabela1 Tabela2;
BY Id;
RUN;
II.9.3. Combinarea de tabele SAS
Interclasarea a două seturi de date PROC SORT DATA=angajat;
BY Id;
DATA tabela_rez; RUN;
MERGE Tabela1 Tabela2; PROC SORT DATA=ore;
BY <DESCENDING> variabila(le);
BY Id;
RUN;
RUN;
DATA tabela-rez;
MERGE angajat ore;
BY Id;
RUN;
II.9.3. Combinarea de tabele SAS
Interclasarea a două seturi de date - cu nume de variabile diferite în
instrucţiunea BY
PROC SORT DATA=angajat;
BY Id;
optiune RENAME =
RUN;
PROC SORT DATA=ore;
BY Id;
RUN;
DATA tabela-rez;
MERGE Angajat Ore (RENAME=(IdPers = Id));
BY Id;
RUN;
II.9.3. Combinarea de tabele SAS
PROC SORT DATA=produse;
BY Cod; Interclasarea unu-la-unu, unu-la mai multi
RUN;
PROC SORT DATA=vanzari;
BY Cod;
RUN;

DATA table_rez;
MERGE Produse Vanzari;
BY Cod;
RUN;
II.9.3. Combinarea de tabele SAS

Actualizare
PROC SORT DATA=preturi;
BY Cod;
RUN;
PROC SORT DATA= Preţuri-actualizate; instructiune UPDATE
BY Cod;
RUN;
DATA Preturi_15dec2005;
UPDATE Preturi Preţuri_actualizate;
BY Cod;
RUN;
II.10. Proceduri specifice SQL
Sintaxa:
PROC SQL;
comandă _sql;
QUIT;

comandă_sql - ALTER, CREATE, DELETE, DESCRIBE, DROP, INSERT, SELECT, UPDATE


Creare tabela query prin intermediul instrucţiunii SELECT:

PROC SQL;
SELECT Id,
Inaltime,
Greutate
FROM exemple.date
WHERE Greutate GT 66;
QUIT;

Dacă doriți să selectați toate variabilele dintr-un set de date, puteți utiliza un asterisc (*)
PROC SQL;
SELECT *
FROM exemple.date
WHERE Greutate GT 66;
QUIT;

Dacă doriți ca rezultatul interogării să fie stocat într-un set de date SAS, includeți un cuvânt cheie CREATE
PROC SQL;
CREATE TABLE tabela1 AS
SELECT *
FROM exemple.date
WHERE Greutate GT 66;
QUIT;
II.10. Proceduri specifice SQL
II.10.1.
PROC SQL; Joncţiunea a două tabele (Merge)
SELECT tabela1.Id,

tabela2.Id,
Inaltime,
Greutate,
Nume,
Gen
FROM exemple.
tabela1,
exemple.
Tabela2;
QUIT;
II.10. Proceduri specifice SQL
II.10.1. Joncţiunea a două tabele (Merge)

PROC Distincția
SQL; între două coloane cu acelaşi nume.
SELECT t1.Id AS Id_
tabela1, Jonctiune INNER JOIN - Sunt enumerați
t2.Id AS Id_ numai subiecții care se află în ambele tabele.
tabela2,
Inaltime,
PROC SORT DATA= exemple. tabela1
Greutate, OUT= tab1;
Nume, BY Id;
Gen RUN;
PROC SORT DATA= exemple. tabela2
FROM exemple. tabela1 OUT= tab2;
AS t1, BY Id;
exemple. tabela2 RUN;
DATA inner;
AS t2
MERGE tab1 (IN=in1)
WHERE t1.Id EQ t2.Id ; tab2 (IN=in2);
QUIT; BY Id;
Echivalent cu IF in1 AND in2;
RUN;
TITLE " Inner Join cu DATA Step";
PROC PRINT DATA=inner;
ID Id;
RUN;
II.10. Proceduri specifice SQL
II.10.1. Joncţiunea a două tabele (Merge)
Jonctiunea INNER JOIN
PROC SQL;
SELECT t1.Id AS Id_ tabela1,
t2.Id AS Id_ tabela2,
Inaltime,
Greutate,
Nume,
Gen
FROM exemple. tabela1 AS t1 INNER
JOIN
exemple. tabela2 AS t2
ON t1.Id EQ t2.Id ;
QUIT;
II.10. Proceduri specifice SQL
II.10.1. Joncţiunea a două tabele (Merge)
Jonctiunea LEFT JOIN

PROC SQL;
TITLE "Left Join";
SELECT t1.Id AS Id_ tabela1,
t2.Id AS Id_ tabela2,
Inaltime,
Gen
FROM exemple.tabela1 AS t1 LEFT
JOIN
exemple.tabela2 AS t2
ON t1.Id EQ t2.Id ;
QUIT;
II.10. Proceduri specifice SQL
II.10.1. Joncţiunea a două tabele (Merge)
Jonctiunea RIGHT JOIN

PROC SQL;
TITLE "Left Join";
SELECT t1.Id AS Id_ tabela1,
t2.Id AS Id_ tabela2,
Inaltime,
Gen
FROM exemple.tabela1 AS t1 RIGHT
JOIN
exemple.tabela2 AS t2
ON t1.Id EQ t2.Id ;
QUIT;
II.10. Proceduri specifice SQL
II.10.1. Joncţiunea a două tabele (Merge)
Jonctiunea FULL JOIN

PROC SQL;
TITLE "Left Join";
SELECT t1.Id AS Id_ tabela1,
t2.Id AS Id_ tabela2,
Inaltime,
Gen
FROM exemple.tabela1 AS t1 FULL
JOIN
exemple.tabela2 AS t2
ON t1.Id EQ t2.Id ;
QUIT;
II.10. Proceduri specifice SQL
Concatenarea seturilor de date prin PROC SQL
Operatorul
UNION
II.10. Proceduri specifice SQL
Concatenarea seturilor de date prin PROC SQL

PROC SQL;
CREATE TABLE tabela_rez
AS
SELECT *
FROM exemple.tabela2
UNION ALL CORRESPONDING
SELECT *
FROM exemple.tabela3
QUIT;
II.10. Proceduri specifice SQL
Utilizarea funcţiilor Summary în PROC SQL

•Instructiunea MEAN
•Optiunea CALCULATED

Exprimarea înăltimii fiecărei persoane în setul de date ca


procent din înăltimea medie a tuturor subiectilor

PROC SQL;
SELECT Id,
Inaltime,
Greutate,
MEAN(Inaltime) AS Inaltime_Medie,
100* Inaltime /CALCULATED Inaltime_Medie AS Procent­
_Inaltime
FROM exemple.tabela1
QUIT;
II.10. Proceduri specifice SQL
Utilizarea funcţiilor Summary în PROC SQL

Sortarea utilizand clauza ORDER

PROC SQL;
SELECT Id,
Inaltime,
Greutate,
FROM exemple.tabela1
ORDER BY Inaltime;
QUIT;
II.10. Proceduri specifice SQL
Utilizarea funcţiilor Summary în PROC SQL

Corespondenţe neclare - Funcția SPEDIS

Joncţiunea tabelelor după nume

PROC SQL;
SELECT Id,
t2.Nume AS tabela2_nume,
t4.Nume AS tabela4_nume
FROM exemple.tabela2 AS t2,
exemple.tabela4 AS t4
WHERE SPEDIS(tabela2_nume , tabela4_nume ) LE
25;
QUIT;
II.11. Prelucrarea variabilelor cu ajutorul
masivelor

Sintaxa simplificată pentru un masiv unidimensional:


ARRAY nume(n) $ lista_variabile;

Inlocuirea valorilor într-un set de date SAS

DATA date1;
SET exemple.date;
ARRAY matrice{3} Inaltime Greutate Varsta;
DO i = 1 TO 3;
IF matrice{i} = 999 THEN matrice{i} = .;
END;
DROP i;
RUN;
II.11. Prelucrarea variabilelor cu ajutorul masivelor
•Cuvântul cheie _CHARACTER_
•Funcția DIM

Următorul program folosește o matrice de caractere pentru a converti toate valorile NA (nu se
aplică) sau semnul de întrebare (?) la o valoare lipsă SAS.

DATA tabela_Lipsă;
SET exemple. tabela5;
ARRAY var_car {*} $ _CHARACTER_;
DO loop = 1 TO DIM(var_car);
IF var_car {LOOP} IN ('NA' '?') THEN
CALL MISSING(var_car {LOOP});
END;
DROP loop;
RUN;

Conversia tuturor valorilor de caractere dintr-un set de date SAS la litere mici.

DATA tabela_rez;
SET exemple.tabela6;
ARRAY matrice{*} _CHARACTER_;
DO i = 1 TO DIM(matrice);
matrice{i} = LOWCASE(matrice{i});
END;
DROP i;
RUN;
II.11. Prelucrarea variabilelor cu ajutorul masivelor

Schimbarea limitelor matricei

DATA contabilitate;
INPUT ID Venit1999- Venit2006;
ARRAY venit{1999:2006} Venit1999– Venit2006;
ARRAY taxe{1999:2006} Taxe1999-Taxe2006;
DO An = 1999 TO 2006;
Taxe{An} = .25*Venit{An};
END;
DROP An;
FORMAT Venit1999- Venit2006
Taxes999-Taxe2006 dollar10.;
DATALINES;
001 45000 47000 47500 48000 48000 52000 53000 55000
002 67130 68000 72000 70000 65000 52000 49000 40100
;

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