Sunteți pe pagina 1din 235

Contents

II. Pachete software integrate – SAS ............................................................................................................ 1

II.1. SAS - Arhitectură, componente, caracteristici ................................................................................... 1


II.2. Introducere în limbajul de programare SAS....................................................................................... 3
II.3. Crearea seturilor de date SAS pornind de la fisiere externe.............................................................. 6
II.3.1. Importul datelor din fişiere text cu delimitatori ......................................................................... 6
II.3.2. Importul datelor din fişiere text cu coloane cu lăţime fixă ......................................................... 8
II.4. Definirea şi aplicarea de formate în secţiunile de date şi de proceduri ............................................ 9
II.5. Adăugarea de variabile la un set de date SAS .................................................................................. 11
II.5.1. Crearea şi utilizarea seturilor de date temporare ...................................................................... 12
II.5.2. Crearea şi utilizarea unui set de date permanent ....................................................................... 13

II. Pachete software integrate – SAS

II.1. SAS - Arhitectură, componente, caracteristici


SAS (acronimul de la Statistical Analysis System) a fost creat în anii 1970 de către SAS Institute
Inc ca un pachet software statistic. De-a lungul timpului, produsul a evoluat ajungând astăzi să
reprezinte unul dintre cele mai utilizate pachete software integrate, care oferă utilizatorilor facilităţi
precum:
1. introducerea, accesarea şi managementul datelor;
2. data mining (extragerea de informaţii din date);
3. realizarea de rapoarte şi grafice;
4. analize statistice;
5. planificarea afacerilor, prognoză şi suport de decizie;
6. cercetări operaţionale şi managementul proiectelor;
7. dezvoltarea de aplicaţii;
8. lucrul cu depozite de date (“data warehousing”);
9. lucrul independent de platforma hardware şi de locaţie.

În plus, SAS oferă soluţii de business şi soluţii software pentru domenii cum ar fi managementul
IT, managementul resurselor umane, management financiar, inteligenţa afacerii (“business
intelligence”), managementul relaţiilor cu clienţii etc. În figura IV.1.1 sunt prezentate
funcţionalităţile principale ale pachetului SAS.

1
Figura IV.1.1. Funcţionalităţile principale ale SAS

SAS constă dintr-un număr mare de componente, pe care organizaţiile le pot achiziţiona şi
instala separat, în funcţie de necesităţi. În centrul soluţiilor SAS se află componenta Base SAS.
Aceasta este un mediu software integrat, având facilităţi pentru accesul la date, analiza datelor,
crearea de rapoarte etc. Base SAS beneficiază şi de suportul unui limbaj de programare propriu
de generaţia a patra (Notă: Limbajele de generaţia a patra sunt orientate pe rezolvarea unei
anumite clase de probleme. Exemple sunt SQL sau PL/SQL sau cele folosite de alte pachete
software ca Matlab sau SPSS). Componentele, de tip bibliotecă, SAS/STAT, SAS/Graph şi
SAS/OR extind capabilităţile motorului de bază Base SAS. SAS/STAT oferă o gamă largă de
instrumente pentru analiza statistică a datelor. SAS/Graph este modulul care permite
vizualizarea datelor sub formă de grafice sau hărţi. SAS/OR este o componentă care are ca scop
susţinerea procesului decizional prin intermediul unor tehnici de optimizare, simulare sau
planificare a proiectelor. SAS/IML este un limbaj specializat în lucrul cu matrice. SAS Add-inn
for MS Office permite utilizatorilor să beneficieze de facilităţile analitice, de raportare şi pentru
accesul la date oferite de SAS direct din Microsoft Office prin intermediul unor meniuri şi bare
de instrumente integrate în produsele Office.
Funcţionalitatea pachetului SAS este construită în jurul a patru tipuri de prelucrări, bazate pe date,
prelucrări comune pentru aproape toate tipurile de aplicaţii software: accesarea datelor (se referă la
obţinerea accesului la datele cerute de aplicaţie), managementul datelor (presupune pregătirea datelor
astfel încât acestea să aibă forma cerută de aplicaţie), analiza datelor (rezumă sau transformă datele
primare în informaţii utile, care au o semnificaţie pentru analist) şi prezentarea datelor (comunică
informaţiile într-o manieră care demonstrează clar semnificaţia acestora).

Produsul lucrează prin intermediul programelor SAS care definesc o succesiune de operaţii ce
trebuiesc efectuate asupra datelor stocate în tabele. Un program SAS este compus din trei părţi
majore, secţiunea de DATE, secţiunile de PROCEDURI, precum şi un limbaj macro. Deşi există
interfeţe grafice destinate utilizatorilor care nu deţin cunoştinţe de programare în SAS (cum este
SAS Enterprise Guide), de cele mai multe ori aceste interfeţe sunt doar un mijloc pentru a
automatiza sau a facilita generarea de programe SAS. Succesiunea de paşi prin care datele sunt
transformate în informaţii este descrisă în figura IV.1.2.

2
Figura IV.12. Transformarea datelor în informaţii

II.2. Introducere în limbajul de programare SAS


Un program SAS constă dintr-o secvenţă de paşi trimisă, pentru execuţie, motorului SAS. În continuare
aceste secvenţe vor fi referite ca “secţiuni”.

Secţiunile pot fi de date (DATA steps) şi secţiuni de proceduri (PROC steps). Secţiunile de date sunt,
de obicei, folosite pentru a crea tabele de date în format SAS (Data Set) pe baza unor seturi de date SAS,
fişiere text sau alte formate, precum şi pentru a actualiza tabele deja existente. Una din modalităţile prin
care SAS Enterprise Guide foloseşte secţiunea de date constă în manipularea datelor în Grila de date
(Data Grid), unde, de exemplu, se poate adăuga o nouă coloană la datele deja existente. O altă modalitate
implică folosirea procedurilor de import a datelor (Import Wizard). Secţiunile de proceduri sunt, de
obicei, folosite pentru a efectua prelucrări şi interogări, pentru a genera rapoarte, a sintetiza date sau
pentru a genera grafice (figura IV.6.1.).

Seturile de date SAS conţin două părţi: o parte descriptivă care stochează informaţii despre valorile
datelor (precum lungimile de stocare, etichetele şi formatele) şi o parte de date propriuzise.

3
Figura IV.6.1. Secţiunile unui program SAS

Secţiunile de date încep cu cuvântul DATA, iar cele de proceduri cu cuvântul PROC şi se termină de cele
mai multe ori cu directiva RUN. Fiecare secţiune este executată complet, înainte să se treacă la
următoarea secţiune.

Produsul SAS conţine, de asemenea şi declaraţii globale, care afectează întreg mediul SAS şi rămân
valide de la o secţiune DATA sau PROC la alta (de exemplu directivele OPTIONS şi TITLE), până
când ele sunt schimbate de alte directive globale sau până se încheie sesiunea de lucru SAS.

Fişierele cu care lucrează SAS la nivel de cod sunt de două tipuri pricipale care sunt reliefate şi în Figura
IV.6.3.: preluate, adică importate din alte aplicaţii (externe), şi fişiere generate de către SAS (interne),
care pot fi temporare (stocate în librăria Work) sau permanente (stocate în alte librării sau directoare
decât Work).

Figura IV.6.3. Tipuri de fişiere în SAS

Sintaxa codului SAS


Declaraţiile SAS au următoarele caracteristici:

 Încep, de obicei, cu un cuvânt cheie.

 Întotdeuna de termină cu punct şi virgulă (de exemplu: title 'Analiză Comenzi';) – această regulă este
foarte importantă deoarece un caracter de tipul ; pus incorect în cadrul codului SAS poate genera
mesaje de eroaregreu de interpretat.

 Pentru a separa cuvintele, se pot folosi unul sau mai multe spaţii libere.

 Declaraţiile pot începe şi se pot termina în orice coloană.

 O singură declaraţie poate fi scrisă pe mai multe rânduri (de exemplu: input Nr_Comandă $ 1-5
Cod_Produs $ 2-10 Cantitate $ 13-15 PreţVânzare 17-22 Venit $ 25-32;).

 Mai multe declaraţii pot fi scrise pe acceaşi linie (de exemplu: title 'Analiză Comenzi‘; var
PreţVânzare; run;).

4
 Introducerea comentariilor se face utilizând caracterele /* pentru a începe un comentariu, apoi se scrie
textul comentariului, iar pentru a-l termina se introduc din nou caracterele */. Aceste comentarii pot fi
utilizate pentru a documenta sau a descrie programul, dar nu influenţează rezultatul acestuia (de
exemplu: /* Creaza tabela SAS ad_date.comenzi */). În aceiaşi linie de cod pot fi introduse mai
multe comentarii imbricate (de exemplu input Produs $ Cantitare /* cantitatea este în bucaţi */
PretAchiziţie PreţVânzare;).

 altă modalitate de a introduce un comentariu este de a-l începe cu caracterul * şi a-l termina cu
caracterul ; indiferent de numărul de linii pe care îl cuprinde.

 directivă care începe cu caracterul nume variabilă = se numeşte directivă de atribuire (assignment
statement). Ea este o instrucţiune de execuţie a calculelor din partea dreaptă a semnului = şi de
atribuire a valorii rezultatului variabilei al cărei nume este trecut în partea stângă a semnului =.
Directiva de atribuire poate utiliza următorii operatori (prezentaţi în ordinea crescătoare a priorităţii
lor): + pentru adunare – pentru scădere * pentru înmulţire / pentru împărţire ** pentru ridicare la
putere – pentru negare.

 SAS este case-sensitive. Numele fiecărei variabile va fi reţinut aşa cum va fi întâlnit prima oară şi
apoi, la generarea rapoartelor, va fi utilizat ca atare.

 Numele variabilelor, precum şi ale seturilor de date nu pot fi mai mari de 32 de caractere şi trebuie să
înceapă cu o literă sau underscore _. Celelalte caractere ale numelui pot fi litere, cifre sau underscore,
dar nu şi caracterele spaţiu, -, %. Iată câteva nume de variabile sau seturi de date SAS valide şi
nevalide:
Valide Nevalide

Nume 8_este_suficient Începe cu un număr

Nume2 Preţul per buc Conţine spaţiilibere

Cost_pe_Kg Total-Luna Conține un caracter nevalid (-)

DATA Num% conține un caracter nevalid (%)

timp

X12Y34Z56

 Instrucţiunea care începe cu un asterisc (*) se numeşte o declaraţie de comentariu. O modalitate de a


scrie un comentariu SAS este de a începe cu un asterisc, de a scrie cât de multe linii de comentariu se
doreşte şi se încheie declaraţia cu; . Ea permite să se includă comentarii şi informaţii despre numele
fişierului utilizat pentru stocarea programului, despre scopul programului şi despre data la care a fost
scris programul, despre data şi scopul oricăror modificări aduse programului.

5
Un alt mod de a adăuga un comentariu la un program SAS este să fie incadrat între seturile de
caractere / * comentariu * /. Se pot include comentarii de acest tip şi într-o declaraţie SAS. De
exemplu, se poate scrie:

INPUT Sex $ Vârsta / * vârsta este în ani * / Înălțime Greutate;

Comentariile pot fi făcute chiar mai elaborate, de exemplu:

*-------------------------------------------------------------------------------------- *

| Nume program: PROG.SAS stocat în d:\datesas\exemple |


| Scop: Programul citeşte date privind înălţimea şi greutatea şi calculează |
| un indicele de masă corporală (IMC) pentru fiecare subiect. |
*-------------------------------------------------------------------------------------- *

sau

/****************************************************************

Nume program: PROG.SAS stocat în d:\datesas\exemple


Scop: Programul citeşte date privind înălţimea şi greutatea şi calculează
un indicele de masă corporală (IMC) pentru fiecare subiect.

******************************************************************/

Seturile de date SAS (SAS data set) conţin două părţi: o parte de descriere şi o parte de date (nu numai
valoarea, ci şi informaţii despre aceasta – ca lungimea, eticheta şi formatul). De asemenea, datele nu pot fi
decât de două tipuri – numerice sau caracter.

II.3. Crearea seturilor de date SAS pornind de la fisiere externe


II.3.1. Importul datelor din fişiere text cu delimitatori

Într-un fişier text delimitat


fiecare linie de text reprezintă o înregistrare, iar câmpurile sunt separate prin caractere
cunoscute.
Delimitatorii frecvent utilizaţi sunt caracterul tab (\t) sau diferite caractere de punctuaţie.
Delimitatorul trebuie întotdeauna să fie un caracter care nu se regăseşte în date
Delimitatorul implicit este spaţiu

6
Numele fisierului de date SAS nou creat se indica dupa cuvântul cheie DATA şi va fi stocat pe
server în rădăcina arborelui utilizatorului

Declaraţia INFILE indică sursa de provenienţă a datelor, inclusiv numele fişierulului text.

Declaraţia INPUT asociază datele cu denumirea variabilelor. Variabila de tip caracter este urmată de
semnul $.

Implicit, lăţimea variabilelor este de 8 octeţi, de aceea pentru a afişa denumirea completă, aceasta se va
seta explicit prin intermediul directivei LENGTH

DATA produse;
INFILE '/home/username/produse.txt';
INPUT Denumire $ Cantitate Categorie $;
RUN;

DATA produse;
INFILE '/home/username/produse.txt';
LENGTH Denumire $15;
LENGTH Categorie $12;
INPUT Denumire $ Cantitate Categorie $;
RUN;

Pentru valori separate prin virgulă, declaraţia INFILE trebuie să conţină opţiunea dsd. Dacă există
două virgule una după alta, se va considera că este o valoare lipsă, fără a fi nevoie ca între virgule să
existe un spaţiu

INFILE '/home/username/produse.txt' dsd;

Pentru alte tipuri de delimitatori, declaraţia INFILE trebuie folosită împreună cu opţiunea dlm sau
delimiter

INFILE '/home/username/produse.txt' delimiter='/';

sau

INFILE '/home/nume.prenume/produse4.txt' dlm='/'; In exemplul de mai jos edte folosit delimitatorul /.

Dacă se doreşte ca datele să fie citite din fişierul text produse.txt şi integrate în cadrul codului
programului, acest lucru se realizează prin intermediul declaraţiei DATALINES

DATA produse;
INFILE '/home/username/produse.txt' dsd;
LENGTH Denumire $15;

7
LENGTH Categorie $12;
INPUT Denumire $ Cantitate Categorie $;
DATALINES;
banane,5,fructe
ciocolata,10,dulciuri
inghetata,11,dulciuri
paine,3,panificatie
coriandru,2,condimente
mere,4,fructe
RUN;
De asemenea dacă utilizatorul nu doreşte să importe datele dintr-un fişier text ci sa le introducă
direct prin intermediul programului se va folosi tot declaraţia DATALINES dar se renunţă la
instrucţiunea INFILE, cu condiţia ca delimitatorul să fie spaţiu:

DATA produse;
INPUT Denumire $ Cantitate Categorie $;
DATALINES;
Banane 5 fructe
Ciocolata 10 dulciuri
Inghetata 11 dulciuri
Paine 3 panificatie
Coriandru 2 condimente
Mere 4 fructe
RUN;

II.3.2. Importul datelor din fişiere text cu coloane cu lăţime fixă

Pentru importul ini astfel de fişier într-un set de date SAS se utilizează declaraţia INPUT
specificând pentru fiecare variabilă denumirea, semnul $ pentru variabilele de tip caracter,
precum şi poziţia de început şi de sfârşit a fiecărei variabile.
DATA produse;
INFILE '/home/username/produse.txt';
INPUT Denumire $ 1-9
Cantitate 10-11
Categorie $ 12-22;
RUN;

DATA demografie;

8
INFILE "d:\datesas\date1.txt";
INPUT Sex $ Varsta Inaltime Greutate;
*Calculeaza indicele de masa corporala (IMC);
IMC = (Greutate / 2.2) / (Inaltime*.0254)**2;
RUN;

II.4. Definirea şi aplicarea de formate în secţiunile de date şi de


proceduri
Această metodă de introducere poate citi datele de tip caracter şi valori numerice standard cât şi
valori numerice nestandard.

Semnele @ din instrucţiunea INPUT se numesc pointeri de coloană (“column pointers”). De


exemplu, @ 4 indică SAS, să meargă la coloana 4. După numele variabilelor se găsesc
formatele de intrare, numite şi informate SAS.

Formatele de intrare sunt instrucţiuni care îi spun SAS cum să citească valoarile datelor.
Alegerea formatului de intrare de utilizat este dictată de date

Formatul w.d citeşte valori numerice standard – w indică câte coloane vor fi citite iar d (care este
opţional) numărul de zecimale ale valorii.

Dacă numărul care va fi citit are deja incorporate cifre zecimale SAS va ignora partea d a
formatului de intrare, punctul zecimal va fi numărat ca o coloană care va fi citită (de exemplu
dacă valoarea care trebuie citită este 1.23 iar formatul de intrare este 4.1 in setul de date SAS se
va regăsi valoarea 1.23

Formatul de intrare $w. Indică citirea a w coloane de tip caracter.

Formatul de intrare MMDDYY10 importul datei în forma mm/dd/yyyy. SAS va stoca data ca o
valoare numerică egală cu numărul de zile începând cu 1 Ianuarie 1960. Astfel, dacă valoarea
importată este 01/01/1960 cu formatul de intrare MMDDYY10 în setul de date SAS se va regăsi
valoarea 0, dacă valoarea importată este 02/02/1960 cu formatul de intrare MMDDYY10 în setul
de date SAS se va regăsi valoarea 1 etc.

De exemplu dacă avem următorul fişier text:


00110/21/1955M 1145
00211/18/2001F 18722
00305/07/1944M 123.45
00407/25/1945F -12345
Programul de import al acestui fişier în maniera neformatată este:

9
DATA Angajati;
INFILE 'd:\exemple\Angajati.txt';
INPUT Id $ 1-3
DataNasterii $ 4-13
Sex $ 14
Salariu 15-21;
RUN;
TITLE "Situatie Angajati";
PROC PRINT data=financial;
RUN;

Unde procedura PRINT realizează listarea fişierului SAS Angajaţi importat din fisierul text
Angajaţi.txt iar instrucţiunea TITLE indica titlul raportului, acesta va fi:
Listing of Situatie Angajati
Obs Id DataNasterii Sex Salariu
1 001 10/21/1955 M 1145.00
2 002 11/18/2001 F 18722.00
3 003 05/07/1944 M 123.45
4 004 07/25/1945 F -12345.00

Dacă se foloseşte citirea formatată, conform următorului program

DATA Angajati;
INFILE 'd:\exemple\Angajati.txt';
INPUT @1 Id $3.
@4 DataNasterii mmddyy10.
@14 Sex $1.
@15 Salariu 7.;
RUN;
TITLE "Situatie Angajati";
PROC PRINT data=financial;
RUN;

Se va obţine următorul raport (unde se observă că data naşterii nu este inteligibilă)

Listing of Situatie Angajati


Obs Id DataNasterii Sex Salariu
1 001 -1533 M 1145.00

10
2 002 15297 F 18722.00
3 003 -5717 M 123.45
4 004 -5273 F -12345.00

Pentru a lista datele din fişierul de date SAS în formatul dorit în procedura PRINT se utilizează
instrucţiunea FORMAT prin care se defineşte un format de ieşire:

DATA Angajati;
INFILE 'd:\exemple\Angajati.txt';
INPUT @1 Id $3.
@4 DataNasterii mmddyy10.
@14 Sex $1.
@15 Salariu 7.;
RUN;
TITLE "Situatie Angajati";
PROC PRINT data=financial;
FORMAT DataNasterii mmddyy10.
Salariu dollar11.2;
RUN;

Listing of Situatie Angajati


Obs Id DataNasterii Sex Salariu
1 001 10/21/1955 M $1,145.00
2 002 11/18/2001 F $18,722.00
3 003 05/07/1944 M $123.45
4 004 07/25/1945 F $-12,345.00

II.5. Adăugarea de variabile la un set de date SAS


 La variabilele unui set de date SAS pot fi ataşate etichete fie in sectiunea DATA fie în
secţiunea PROC.
 Etichetele pot fi create prin intermediul instrucţiunii LABEL.
 După cuvântul cheie LABEL, se introduce numele variabilei, urmat de un semnal egal, apoi
de etichetă, plasată între o singură sau două ghilimele.
 Etichetele pot avea o lungime de până la 256 de caractere (255 pe platforme UNIX).
Înstrucţiunea LABEL se termină cu cucaracterul ;. Când se execută anumite proceduri SAS,
aceste etichete sunt tipărite împreună cu variabila nume.
De exemplu
DATA note_test;

11
LENGTH ID $ 3 Nume $ 15;
INPUT ID $ Nota1-Nota3;
LABEL ID = NumarMatricol'
Nota1 = 'Matematica'
Nota2 = ‘Geografie'
Nota3 = 'Fizica';
RUN;
 Dacă includeţi instrucţiunea LABEL în secţiunea DATA, etichetele rămân asociate cu
variabilele respective;
 Dacă includeţi instrucţiunea LABEL într-un pas PROC, etichetele sunt utilizate numai
pentru acea procedură. Acest lucru se datorează faptului că eticheta creată într-o etapă DATA
este stocată în partea descriptivă a setului de date SAS.

II.5.1. Crearea şi utilizarea seturilor de date temporare

 Când se utilizează o secţiune de date pentru a crea un set de date, în mod normal se crează un
set de date temporar, care va exista doar pe durata sesiunii de lucru curente.
 SAS plasează acest set de date într-o bibliotecă de date SAS care este referită ca “WORK”.
 Toate fişierele SAS sunt sterse la sfârşitul sesiunii de lucru.

În continuare este prezentat un exemplu a unei secţiuni DATA în care se crează un set de date
temporar NOTE_TEST.

DATA note_test;
LENGTH ID $ 3 Nume $ 15;
INPUT ID $ Nota1-Nota3;
LABEL ID = NumarMatricol'
Nota1 = 'Matematica'
Nota2 = ‘Geografie'
Nota3 = 'Fizica';
RUN;

Programul precedent se referă la un set de date temporar ca fiind NOTE_TEST.SAS.


Produsul SAS ataşează prefix-ul WORK la toate set-urile de date temporare şi referă setul de
date NOTE_TEST cu numele compus WORK.NOTE_TEST.

12
Deoarece SAS asignează implicit prefix-ul WORK la toate set-urile de date SAS care nu au alt
prefix nu mai este nevoie să se utilizeze WORK când se rederă seturi de date temporare cum
este NOTE_TEST.

Pentru a referii acest set de date în altă secţiune DATA sau într-o secţiune PROC, se poate folosi
numele set-ului de date fără prefix-ul WORK:
PROC PRINT DATA = NOTE_TEST;
RUN;

II.5.2. Crearea şi utilizarea unui set de date permanent

Pentru a crea un set de date permanent trebuie să se indice o bibliotecă de date SAS, alta decât
WORK. WORK este un libref (referinţă de bibliotecă) rezervat pe care SAS-ul îl alocă automat
la o bibliotecă de date temporară.
Declaraţia LIBNAME se utilizează pentru a atribui un libref la o bibliotecă SAS de date. Libref
funcţionează ca un mod rapid de referire a unei biblioteci de date SAS.
Forma declaraţiei LIBNAME este următoarea:

LIBNAME libref ’your-data-library’;

unde
libref
este un nume de acces rapid către locaţia în care sunt stocate fişierele SAS ale
utilizatorului.
Libref trebuie să fie un nume valid din punct de vedere al sintaxei SAS (trebuie
să înceapă cu o literă sau cu caracterul _ şi poate conţine atât litere mici cât şi
majuscule sau cifre) şi poate avea maxim 8 caractere.

’your-data-library’

trebuie să fie numele fizic al bibliotecii dvs. de date SAS. Numele fizic este
numele recunoscut de mediul de operare.

Următorul exemplu este un exemplu al instrucțiunii LIBNAME care se utilizează cu un pas


DATA:

13
libname saveit ’your-data-library’; [1]
data saveit.note_test; [2]

...mai multe instrucţiuni SAS...

proc print data = saveit.note_test; [3]


run;

[1] Instrucțiunea LIBNAME asociază libref SAVEIT cu biblioteca de date, unde “your-data-
library” este numele dvs. de mediu de operare pentru o bibliotecă de date SAS.
[2] Pentru a crea un nou set de date SAS permanent şi a le stoca în această bibliotecă de date
SAS, trebuie să utilizaţi numele pe două niveluri SAVEIT. NOTE_TEST în instrucţiunea
DATA.
[3] Pentru a face referire la acest set de date SAS într-un pas ulterior DATA sau într-un pas
PROC, trebuie să utilizaţi numele la două niveluri SAVEIT.NOTE_TEST în pasul PROC.

14
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
Contents
II.9. Subseturi şi conbinarea seturilor de date SAS 161 ............................................................. 1
II.9.1. Partajarea unui set de date SAS.................................................................................... 1
II.9.2. Crearea mai multor subset-uri de date SAS într-un singur DATA Step ...................... 2
II.9.3. Combinarea de tabele SAS ........................................................................................... 3
II.9.3.1. Conbinarea Unu la Unu ................................................................................. 3
II.9.3.2. Concatenarea ................................................................................................. 4
II.9.3.3. Intercalarea seturilor de date ......................................................................... 6
II.9.2.4. Inbinarea a două seturi de date ...................................................................... 8
II.10. Proceduri specifice SQL.................................................................................................. 13
II.10.1. Joncţiunea a două tabele (Merge)............................................................................. 14
II.10.1. Concatenarea seturilor de date ................................................................................. 18
II.10.3. Utilizarea funcţiilor Summary în PROC SQL.......................................................... 20
II.10.4. Corespondenţe neclare ............................................................................................. 21
II.11. Prelucrarea variabilelor cu ajutorul masivelor ................................................................ 21
II.12.1. Inlocuirea valorilor într-un set de date SAS ............................................................. 22
II.12.2. Utilizarea unei matrici pentru a crea noi variabile ................................................... 24
II.12. Realizarea de rapoarte agregate şi de detaliu .................................................................. 25
II.10.1. Afişarea datelor ........................................................................................................ 25
II.10.2. Crearea rapoartelor personalizate ............................................................................. 31

II.9. Subseturi şi conbinarea seturilor de date SAS 161


II.9.1. Partajarea unui set de date SAS

Partajarea unui set de date SAS implică selectarea observațiilor dintr-un set de date prin
definirea criteriilor de selecție, de obicei într-o instrucțiune WHERE sau IF.

De exemplu, să presupunem că se doreşte selectarea tuturor observațiilor din setul de date SAS
permanent sondaj aflat în biblioteca exemple, unde valoarea variabilei gen este F. O modalitate
de a face acest lucru este cu o instrucțiune WHERE, după cum urmează:
DATA femei;
SET exemple.sondaj;
WHERE gen = 'F';
RUN;

Amintiți-vă că variabilele utilizate într-o instrucțiune WHERE trebuie să provină dintr-un fişier
de date SAS. Variabilele care sunt create prin citirea datelor brute sau dintr-o instrucțiune de

1
atribuire nu pot fi utilizate în acest mod. În programul de mai sus, setul de date femei conține
toate observațiile din fişierul de date Sondaj în care Gen are valoarea F.
Iată o listă a acestui set de date:
Listing of FEMEI
ID Gen Varsta Salariu Intreb1 Intreb 2 Intreb 3 Intreb 4 Intreb 5
002 F 55 76123 4 5 2 1 1
004 F 67 128000 5 3 2 2 4
007 F 45 76100 5 3 4 3 3

Observați că setul de date Femei conține toate variabilele găsite în setul de date Sondaj.

Dacă nu aveți nevoie de una sau mai multe variabile din setul de date de intrare (setul de date
din instrucțiunea SET), puteți utiliza o opțiune DROP = sau KEEP = set de date.

De exemplu, pentru a omite SALARIU din noul set de date, puteți utiliza următoarea metodă:
data femei;
set exemple.sondaj (drop=Salariu);
where gen = 'F';
run;

II.9.2. Crearea mai multor subset-uri de date SAS într-un singur DATA Step

Dintr-un set de date de intrare se pot crea mai multe subseturi de date SAS (SQL nu face).

După exemplul anterior, puteți crea un set de date care conține numai date despre femei și unul
care conține numai date despre bărbați, într-un singur pas astfel:

DATA barbati femei;


SET exemple.sondaj;
IF gen = 'F' THEN OUTPUT femei;
ELSE if gen = 'M' THEN OUTPUT barbati;
RUN;
Observați că trebuie să denumiți setul de date după instrucțiunea OUTPUT. Dacă nu, SAS
transmite observația către toate seturile de date listate în instrucțiunea DATA.

2
II.9.3. Combinarea de tabele SAS
II.9.3.1. Conbinarea Unu la Unu

Se face prin mai multe instructiuni set cu care se pot citi mai multe tabele diferite sau acelasi
tabel de mai multe ori;
Forma generala este:

DATA tabela-rez;
SET tabela-1;
SET tabela-2;
RUN;
unde:
 tabela-rez este numele tabelului nou creat;
 tabela-1 şi tabela-2 sunt tabelele sursă care se vor combina;
 Noul tabel va contine toate variabilele din toate tabelele specificate prin instrucţiunea
SET.
 Observatiile sunt combinate pe baza pozitiilor lor relative din fiecare tablă - prima
observatie este cuplata cu prima observatie din al doilea tabel, s.a.m.d.; pasul DATA
se opreste cand intalneste primul sfarsit de tabel – deci cand se termina cel mai mic dintre
tabele.
 Daca tabelele sursa au variabile cu acelasi nume, variabila din ultimul tabel va
supra-scrie toate informatiile citite din tabelele anterioare.
 Numarul de observatii din tabelul nou creat este egal cu numarul cel mai mic de
observatii din tabelele sursa.

Exemplu: Fie tabelele SAS A şi B:

Tabela A Tabela B
CodProd Denumire CodProd Cantitate
1 P1 2 100
3 P2 4 20
5 P3

Programul
data one2one;
set A;
set B;
run;

Tabela rezultată va fi

3
CodProd Denumire Cantitate
2 P1 100
4 P2 20

II.9.3.2. Concatenarea
Concatenarea:
 tabelele sunt asezate unul după altul;
 noul tabel va contine toate variabilele din toate tabelele concatenate.

Forma generală:
DATA concat;
SET A B;
RUN;

Într-o instrucțiune SET se pot specifica mai multe seturi de date și SAS va adăuga toate
observațiile împreună pentru a forma un singur set de date.

Să presupunem că doriți să creați un singur set de date din mai multe seturi de date similare. De
exemplu, compania dvs. poate colecta date în fiecare lună în seturi de date separate și doriți să
analizați date pe o perioasă de un an.

Exemplu 1: Ambele tabele au aceiaşi structura (aceleaşi coloane)

Tabela-1
Nr Id Nume Greutate
1 7 Popescu 75
2 1 Ionescu 90
3 2 Pop 100
4 4 Vasile 80

Tabela-2
Nr Id Nume Greutate
1 9 Adam 120
2 3 Avram 65
3 5 Ion 95

Fiecare set de date conține aceleași variabile.


Lungimea de stocare pentru Nume este aceeași în fiecare dintre cele două seturi de date.
O modalitate de a combina aceste seturi de date este următoarea:

4
data tabela-rez 1-2;
set A B;
run;

Tabela rezultat va fi:


Nr Id Nume Greutate
1 7 Popescu 75
2 1 Ionescu 90
3 2 Pop 100
4 4 Vasile 80
5 9 Adam 120
6 3 Avram 65
7 5 Ion 95

Toate observațiile din setul de date Tabela-1sunt urmate de toate observațiile din setul de date
Tabela-2. SAS se referă la acest proces ca seturi de date concatenate.

Exemplu 2: Tabele nu au aceiaşi structura (aceleaşi variabile)


Tabela1
Nr Id Nume Greutate
1 7 Popescu 75
2 1 Ionescu 90
3 2 Pop 100
4 4 Vasile 80

Tabela3
Nr Id Gen Nume
1 10 M Popescu
2 15 F Ionescu
3 20 M Pop

Setul de date tabela3 conține o nouă variabilă, Gen și nu conține variabila Greutate. Numele
variabilei Nume din ambele seturi de date are aceeași lungime.

Să folosim instrucțiunea SET pe seturile de date Tabela1 și Tabela3 și să vedem ce se întâmplă.

DATA Tabela_rez_1_3;
SET Tabela1 Tabela3
RUN;

Rezultatul este
Tabela-1

5
Nr Id Nume Greutate Gen
1 7 Popescu 75
2 1 Ionescu 90
3 2 Pop 100
4 4 Vasile 80
5 10 Popescu M
6 15 Ionescu F
7 20 Pop M

În zona buffer se aduc variabilele (cu atributele lor) din Tabela1 (Id, Nume, Greutate).
Se verifică structută Tabela3
Dacă există alte variabile faţă de cele din Tabela1(Gen) se completează cu ele zona buffer.
Se iniţializează toate variabilele cu valori lipsă.
Toate observaţiile din Tabela1 sunt citite și scrise în Tabela_rez_1_3.
Se iniţializează variabilele aferente Tabela3 cu valori lipsă.
Toate observaţiile din Tabela3 sunt citite și scrise în Tabela_rez_1_3.

Dacă lungimea unei variabile este diferită în oricare dintre seturile de date de intrare,
lungimea variabilei din setul de date de ieșire este egală cu lungimea pe care o are variabila
din primul set de date întâlnit în etapa DATA.

Este o idee bună să verificați lungimile variabilelor de caractere atunci când combinați mai multe
seturi de date pentru a vă asigura că nu veți trunchia nici o valoare. Dacă este necesar, plasați o
instrucțiune LENGTH înainte de instrucțiunea SET pentru a vă asigura că lungimea rezultată
este adecvată pentru a vă ține toate valorile.

Rețineți că lungimea unei variabile de caractere este determinată de îndată ce acea variabilă intră
în PDV; acesta nu poate fi schimbat după aceea.

În cele din urmă, dacă aveți o variabilă în două seturi de date, un caracter și altul numeric, SAS
imprimă un mesaj de eroare în jurnal și programul se termină.

II.9.3.3. Intercalarea seturilor de date

Dacă fiecare dintre seturile de date care urmează să fie combinate este deja sortat, pentru
intercalarea lor se poate utiliza instrucțiunea SET cu o instrucțiune BY.

SAS selectează observațiile din fiecare set de date de intrare în ordine, iar setul de date rezultat
este deja sortat.

6
Forma generala este:
DATA tabela_rez;
SET Tabela1 Tabela2;
BY variabla(le);
RUN;

Unde variabla(le) indica variabilele dupa care se va face intercalarea.


 Toate tabelele din lista SET trebuie sa fie ordonate dupa variabilele din lista BY
 Fiecare dintre seturile de date din instrucțiunea SET trebuie să fie în ordinea variabilei
BY.
Pentru a demonstra intercalarea seturilor de date, să combinăm seturile de date Tabela1 și
Tabela2 în setul de date Tabela_rez în ordinea ID.
Tabela-1
Nr Id Nume Greutate
1 7 Popescu 75
2 1 Ionescu 90
3 2 Pop 100
4 4 Vasile 80

Tabela-2
Nr Id Nume Greutate
1 9 Adam 120
2 3 Avram 65
3 5 Ion 95

Programul următor va genera tabela-rez


PROC SORT DATA= Tabela1;
by Id;
RUN;

PROC SORT DATA= Tabela2;


BY ID;
run;

DATA tabela_rez;
SET Tabela1 Tabela2;
BY Id;
RUN;

7
Tabela-rez
Id Nume Greutate
1 Ionescu 90
2 Pop 100
3 Avram 65
4 Vasile 80
5 Ion 95
7 Popescu 75
9 Adam 120

Exemplu 2:
DATA vanzari;
SET vanzari1999 vanzari2000;
BY luna;
RUN;

II.9.2.4. Interclasarea a două seturi de date

SAS utilizează termenul interclasare pentru a descrie procesul de combinare a variabilelor


(coloanelor) din două sau mai multe seturi de date.

De exemplu, ați putea avea un set de date angajat (Angajat) care să conțină numărul de
identificare și numele şi un alt set de date (Ore) care conține numărul de identificare, împreună
cu departamentul în care lucrează și numărul de ore lucrate, este posibil să se dorească să se
adauge numele angajatului (din setul de date Angajat) la fiecare observație din setul de date Ore.

Tabela Angajat Tabela Ore


Id Nume Id Departament Ore
1 Popescu 1 Contabilitate 39
2 Ionescu 4 Productie 44
4 Grigorescu 5 Contabilitate 36
5 Avram 9 Productie 57
7 Vasile

Forma generala:
DATA tabela_rez;
MERGE Tabela1 Tabela2;
BY <DESCENDING> variabila(le);
RUN;

8
unde:
 Tabela_rez denumeste tabelul nou creat de pasul data;
 Tabela1 şi Tabela2 - tabelele SAS din care se citesc datele;
 variabila(le) in instrucţiunea BY specifica una sau mai multe variabile dupa care se unesc
observatiile
 <DESCENDING> indica faptul ca datele sursa sunt ordonate in ordine descrescatoare dupa
variabila care urmeaza; daca in lista BY sunt mai multe variabile, <descending> are efect
doar asupra variabilei care urmeaza imediat dupa ea.
 Tabelele din instructiunea BY trebuie sa fie sortate inainte de executarea pasului DATA;
 variabilele din BY trebuie sa aiba acelasi tip in toate tabelele unite de instructiunea MERGE;
 descending nu se poate folosi cu tabele indexate pentru ca acestea sunt intotdeauna ordonate
crescator.

Programul care va realiza intercalarea este:

PROC SORT DATA=angajat;


BY Id;
RUN;

PROC SORT DATA=ore;


BY Id;
RUN;

DATA tabela-rez;
MERGE angajat ore;
BY Id;
RUN;

În primul rând se sortează fiecare tabelă de intrare în funcţie de variabila sau variabilele care
leagă cele două seturi de date. Apoi, în instrucţiunea MERGE se indică numele fabelelor sortate,
urmând instrucțiunea BY prin care se indică denumirea variabilei sau a variabilelor care indică
SAS care observații trebuie plasate în aceeași observație.

Tabela-rez
Id Nume Departament Ore
1 Popescu Contabilitate 39
2 Ionescu
4 Grigorescu Productie 44
5 Avram Contabilitate 35
7 Vasile
9 Productie 57

In tabelul rezultat vor aparea toate observatiile din toate tabelele sursa.

9
Daca unul din tabelele de intrare nu contine observatii pentru o anumita valoare a variabilei BY
in tabelul rezultat acestea se completeaza cu valoarea nulă MISSING

Dacă s-ar omite instrucțiunea BY, primele trei observații din setul de date Angajat ar fi corelate
cu primele trei observații din setul de ore Ore. Rezultatul ar fi complet greșit.

S-ar putea să se dorească ca setul de date fuzionat să conțină numai acei angajați care se află în
setul de date Ore sau să se verifice dacă angajații din setul de date Ore nu se regăsesc în setul de
date despre angajați. În acest scop se utilizează opţiunea IN =
DATA nou;
MERGE angajat(in=InAngajat)
ore (in=InOre);
BY Id;
FILE PRINT;
PUT ID= InAngajat = InOre = Nume= Departament= Ore=;
RUN;

O opțiune IN = set de date urmează după fiecare nume de set de date. După cuvântul cheie IN =
este un nume de variabilă pe care îl creați.

În acest exemplu, au fost alese numele InAngajat și InOre. Aceste două variabile sunt variabile
temporare (SAS nu le va adăuga la setul de date de ieșire). Ele au o valoare de 1 (adevărat) în
cazul în care setul de date la care se referă aduce o contribuție la observația curentă și 0 (fals)
altfel. Deoarece aceste variabile nu sunt în setul de date de ieșire, programul anterior utilizează o
instrucțiune PUT pentru a lista valorile acestor variabile, împreună cu alte variabile din setul de
date. Rrezultatul este:
ID=1 InAngajat =1 InOre =1 Nume=Popescu Departament= Contabilitate Ore=39
ID=2 InAngajat =1 InOre =0 Nume = Ionescu Departament = Ore =
ID=4 InAngajat =1 InOre =1 Nume = Grigorescu Departament = Productie Ore =44
ID=5 InAngajat =1 InOre =1 Nume = Avram Departament = Contabilitate Ore =35
ID=7 InAngajat =1 InOre =0 Nume = Vasile Departament = Ore =.
ID=9 InAngajat =0 InOre =1 Nume = Departament = Productie Ore =57

Puteți utiliza variabilele IN = pentru a controla care observații sunt scrise în setul de date de
ieșire. De exemplu, dacă doriți numai acei angajați care se află în ambele seturi de date, puteți
adăuga o instrucțiune IF la pasul DATA, după cum urmează:

DATA combine;
MERGE Angajat(IN= InAngajat)
ore(IN= InOre);
BY ID;
IF InAngajat AND InOre;
RUN;

10
sau if InEmploy = 1 and InHours = 1;
Interclasarea a două seturi de date care au nume de variabile diferite în instrucţiunea BY -
în acest caz se va utiliza opțiune RENAME =

De exemplu pentru tabelele


Tabela Angajat Tabela Ore
Id Nume IdPers Departament Ore
1 Popescu 1 Contabilitate 39
2 Ionescu 4 Productie 44
4 Grigorescu 5 Contabilitate 36
5 Avram 9 Productie 57
7 Vasile

Se poate folosi
DATA tabela_rez;
MERGE Angajat Ore (RENAME=(IdPers = Id));
BY Id;
RUN;

Interclasarea unu-la-unu, unu-la mai multi


În exemplele de îmbinare prezentate anterior, în ambele seturi de date, a existat o singură
observație pentru fiecare valoare a variabilei BY. Aceasta se numește interclasare unu-la-unu.

Este posibil ca un set de date să aibă o singură observație pentru fiecare valoare a variabilei BY,
dar celălalt set de date să aibă mai multe observații pentru fiecare valoare a variabilei BY.
Aceasta este denumită interclasare unu-la-multe.
De exemplu, tabelele următoare:
Tabela Produse Tabela Vanzari
Cod Denumire Cod Cantitate

123 Masa 123 200

222 Scaun 123 250

333 Canapea 222 205

333 317

333 400

333 500

11
După execuţia codului
DATA table_rez;
MERGE Produse Vanzari;
BY Id;
RUN;
se obţine tabela rezultat:
Tabela_rez

Obs Cod Denumire Cantitate

1 123 Masa 200

2 123 Masa 250

3 222 Scaun 205

4 333 Canapea 317

5 333 Canapea 400

6 333 Canapea 500

Dacă aveți două seturi de date care au câteva variabile comune și efectuați o interclasare de
seturi de date, valorile din cel de-al doilea set de date înlocuiesc valorile din primul set de
date, chiar dacă valorile din al doilea set de date sunt lipsite de valori.

Dacă folosiți o instrucțiune UPDATE, valorile lipsă din al doilea set de date nu înlocuiesc
valorile din primul set de date. Aceasta face ca declarația UPDATE să fie perfectă pentru
actualizarea valorilor într-un set de date de bază din noile valori dintr-un set de date de
tranzacție.
De exemplu există tabelel Preturi şi Preţuri_actualizate
Preturi Preţuri_actualizate

Cod Denumire Pret Cod Denumire Pret

123 Masa 200 123 Masa

222 Scaun 250 222 Scaun 300

333 Canapea 205 333 Canapea

12
Codul care va realiza actualizarea este
PROC SORT DATA=preturi;
BY Cod;
RUN;

PROC SORT DATA= Preţuri-actualizate;


BY Cod;
RUN;

DATA Preturi_15dec2005;
UPDATE Preturi Preţuri_actualizate;
BY Cod;
RUN;

II.10. Proceduri specifice SQL


PROC SQL oferă o alternativă la pasul DATA pentru interogarea și combinarea seturilor de date
SAS.
Există două modalităţi de bază prin care se poate utiliza SQL împreună cu SAS:
- încorporarea de instrucţiuni SQL complete în procedura SQL;
- încorporarea declaraţiei WHERE pentru a selecta rânduri în secţiunile de date şi
proceduri SAS.
Ambele variante sunt disponibile cu Base SAS şi nu necesită software adiţional
Sintaxa:
PROC SQL;
comandă _sql;
QUIT;
comandă_sql poate fi orice comandă de tipul ALTER, CREATE, DELETE, DESCRIBE,
DROP, INSERT, SELECT sau UPDATE având la sfârşit seminul “;”.
Pot fi definite oricâte comenzi SQL într-o procedură SQL. Este o bună practică să se plaseze
QUIT la finalul declaraţiei, nefiind însă obligatoriu.
De exemplu programul de mai jos crează un query prin intermediul instrucţiunii SELECT:
PROC SQL;
SELECT Id,
Inaltime,
Greutate
FROM exemple.date
WHERE Greutate GT 66;
13
QUIT;

 Variabilele din listă sunt separate prin virgule (spațiile nu funcționează).


 Cuvântul cheie FROM numește setul de date care va fi citit.
 Clauza WHERE descrie subgrupul dorit.
 SELECT, FROM și WHERE formează o singură interogare, care se termină cu ;.
 În acest exemplu, nu se crează un set de date de ieșire, astfel că, în mod implicit, rezultatul
acestei interogări este trimis ca o listă în fereastra de ieșire (sau în orice locație de ieșire
specificată).
 Interogarea se încheie cu o instrucțiune QUIT. Nu este nevoie de o instrucțiune RUN
deoarece PROC SQL se execută de îndată ce a fost specificată o interogare completă.
 Dacă nu se include o instrucțiune QUIT, PROC SQL rămâne în memorie pentru o altă
interogare.

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.1. Joncţiunea a două tabele (Merge)

Se pot selecta variabile din două tabele listând toate variabilele de interes în clauza SELECT
și enumerând cele două seturi de date din clauza FROM.

Dacă o variabilă are același nume în ambele seturi de date, este nevoie de o modalitate de a
distinge ce set de date se va utiliza.
Considerând două tabele

14
Tabela1 Tabela2
Id Inaltime Greutate Id DataNasterii Gen Nume
001 155 68 001 10/15/1960 M Popescu
003 250 74 002 08/01/1955 M Ionescu
004 110 63 003 12/25/1988 F Georgescu
005 95 60 005 05/28/1949 F Ion

PROC SQL;
SELECT tabela1.Id,
tabela2.Id,
Inaltime,
Greutate,
Nume,
Gen
FROM exemple. tabela1,
exemple. Tabela2;
QUIT;
Deoarece coloana Id este în ambele tabele, prefixați numele variabilei cu numele tabelului.
Rezultatul va fi:
Id Id Inaltime Greutate Nume Gen
001 001 68 155 Popescu M
001 002 68 155 Ionescu M
001 003 68 155 Georgescu F
001 005 68 155 Ion F
003 001 74 250 Popescu M
003 002 74 250 Ionescu M
003 003 74 250 Georgescu F
003 005 74 250 Ion F
004 001 63 110 Popescu M
004 002 63 110 Ionescu M
004 003 63 110 Georgescu F
004 005 63 110 Ion F
005 001 60 95 Popescu M
005 002 60 95 Ionescu M
005 003 60 95 Georgescu F
005 005 60 95 Ion F

15
Dacă doriți să păstrați ambele valori de Id din fiecare set de date, puteți redenumi coloanele,
astfel:
PROC SQL;
SELECT tabela1.Id AS tabela1.Id ,
tabela2.Id AS tabela2.Id,
Inaltime,
Greutate,
Nume,
Gen
FROM exemple. tabela1,
exemple. Tabela2;
QUIT;

Un produs cartezian este util în special atunci când doriți să efectuați potriviri între nume în
două tabele similare. Numărul de rânduri din tabelul rezultat este numărul de rânduri din primul
table înmulţit cu numărul de rânduri din al doilea tabel.

În practică, se adaugă o clauză WHERE pentru a restricționa ce rândurile selectate.

În programul care urmează, adăugăm o clauză WHERE pentru a selecta numai acele rânduri în
care numărul subiectului este același în cele două tabele. În afară de adăugarea unei clauze
WHERE, programul următor arată cum să se facă distincția între două coloane ambele cu acelaşi
nume.
PROC SQL;
SELECT t1.Id AS Id_ tabela1,
t2.Id AS Id_ tabela2,
Inaltime,
Greutate,
Nume,
Gen
FROM exemple. tabela1 AS t1,
exemple. tabela2 AS t2
WHERE t1.Id EQ t2.Id ;
QUIT;

Numai subiecții care se află în ambele tabele sunt enumerați. În terminologia SQL, aceasta se
numește o conexiune internă (inner join). Este echivalent cu o interclasare (merge) într-o etapă
DATA în care fiecare dintre cele două seturi de date contribuie la îmbinare.
PROC SORT DATA= exemple. tabela1 OUT= tab1;
BY Id;
RUN;
PROC SORT DATA= exemple. tabela2 OUT= tab2;
BY Id;

16
RUN;
DATA inner;
MERGE tab1 (IN=in1)
tab2 (IN=in2);
BY Id;
IF in1 AND in2;
RUN;
TITLE " Inner Join cu DATA Step";
PROC PRINT DATA=inner;
ID Id;
RUN;

Left, Right şi Full Joins


O alternativă este de a separa numele celor două tabele cu termenul 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;
Una dintre regulile SQL este că atunci când se utilizează cuvântul cheie JOIN pentru a realize o
joncţiune între două tabele, se va folosi o clauză ON în locul unei clauze WHERE (după care
din rezultat se poate crea un subset cu o clauză WHERE).

LEFT JOIN include toate rândurile din prima (stânga) tabelă și acele rânduri din a doua tabelă
în care există o valoare corespunzătoare în primul tabel.

RIGHT JOINS include toate rândurile din tabelul 2 (dreapta) și numai rândurile potrivite din
primul tabel.
FULL JOINS include toate rândurile din ambele tabele (echivalent cu o MERGE într-un pas
DATA).
PROC SQL;
SELECT t1.Id AS Id_ tabela1,
t2.Id AS Id_ tabela2,
Inaltime,
Greutate,

17
Nume,
Gen
FROM exemple. tabela1 AS t1,
exemple. tabela2 AS t2
WHERE t1.Id EQ t2.Id ;
QUIT;

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 ;
TITLE "Right 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 ;
TITLE "Full 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.1. Concatenarea seturilor de date

Într-un pas DATA, concatenarea a două seturi de date, se face denumindu-le într-o singură
instrucțiune SET.

18
În PROC SQL, se utilizează un operator UNION pentru a concatenarea rândurilor selectate din
cele două tabele.

Operator Descriere
Union Corespondenţa se face între poziția coloanei (nu cu numele coloanei) și se
elimină duplicatele
Union All Corespondenţa se face între poziția coloanei (nu cu numele coloanei) și
nu se elimină duplicatele
Union Corespondenţa se face între numele coloanei și se elimină duplicatele
Corresponding
Union All Corespondenţa se face între numele coloanei și nu se elimină duplicatele
Corresponding
Except Corespondenţa se face între numele coloanei și se elimină rândurile gasite
în ambele tabele
Intersection Corespondenţa se face între numele coloanei și se păstrează rândurile
unice din ambele tabele

Fie fişierele
Tabela1 Tabela2 Tabela3
Id Inaltime Greutate Id DataNasterii Gen Nume Id Gen Nume DataNasterii
001 155 68 001 10/15/1960 M Popescu 010 F Vasile 03/05/1977

003 250 74 002 08/01/1955 M Ionescu 013 M Andrei 06/07/1999

004 110 63 003 12/25/1988 F Georgescu


005 95 60 005 05/28/1949 F Ion

Să presupunem că se doreşte să se adauge date din tabela 3 în setul de date tabela2 și noul set de
date să se numească tabela_rez folosind PROC SQL. (coloanele nu sunt în aceeași ordine cu
setul de date tabela 2.)
PROC SQL;
CREATE TABLE tabela_rez AS
SELECT *
FROM exemple.tabela2 UNION ALL CORRESPONDING
SELECT *
FROM exemple.tabela3
QUIT;

Se va obţine

19
Tabela_rez
Id DataNasterii Gen Nume
001 10/15/1960 M Popescu
002 08/01/1955 M Ionescu
003 12/25/1988 F Georgescu
005 05/28/1949 F Ion
010 03/05/1977 F Vasile
013 06/07/1999 M Andrei

II.10.3. Utilizarea funcţiilor Summary în PROC SQL

Puteți utiliza funcții precum MEAN și SUM pentru a crea noi variabile care reprezintă medii sau
sume ale altor variabile.
De asemenea, puteți crea noi variabile în cadrul interogării.
Să presupunem că doriți să exprimați înălțimea fiecărei persoane în setul de date pentru sănătate
ca procent din înălțimea medie a tuturor subiecților (folosind un pas DATA, ar trebui mai întâi
să utilizați PROC MEANS pentru a crea un set de date care să conțină înălțimea medie. Veți
combina apoi cu setul de date original și efectuați calculul).

PROC SQL;
SELECT Id,
Inaltime,
Greutate,
MEAN(Inaltime) AS Inaltime_Medie,
100* Inaltime /CALCULATED Inaltime_Medie AS Procent_Inaltime
FROM exemple.tabela1
QUIT;
Înălțimea medie se calculează utilizând funcția MEAN. Această valoare este dată și variabilei
Inaltime_Medie. Când utilizați această variabilă într-un calcul, trebuie să o precede cu cuvântul
cheie CALCULATED, astfel încât PROC SQL să nu caute variabila într-unul din seturile de
date de intrare.
PROC SQL poate sorta tabelul dacă utilizați o clauză ORDER

PROC SQL;
SELECT Id,
Inaltime,
Greutate,
FROM exemple.tabela1
ORDER BY Inaltime;
QUIT;

20
II.10.4. Corespondenţe neclare
Fie tabelele
Tabela2 Tabela4
Id DataNasterii Gen Nume Nume Tip
001 10/15/1960 M Popescu Poescu F

002 08/01/1955 M Ionescu Andrei M

003 12/25/1988 F Georgescu Ion F


005 05/28/1949 F Ion Ionescu M

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;

Funcția SPEDIS permite scrierea greșită.


Clauza WHERE funcționează pe fiecare combinație de nume din cele două tabele și selectează
acele nume care se află într-o distanță de ortografie de 25.

II.11. Prelucrarea variabilelor cu ajutorul masivelor


Masivul SAS reprezintă o colecție de elemente (de obicei variabilele SAS) care permit scrierea
de declarații SAS care fac trimitere la acest grup de variabile.

Masivele SAS sunt diferite de cele din multe alte limbaje de programare. Ele nu dețin valori și
permit referirea, într-o manieră convenabilă, la o colecție de variabile SAS.

Sintaxa simplificată pentru un masiv unidimensional:


ARRAY nume(n) $ lista_variabile;
unde:
- nume = numele masivului. Numele matricilor urmează aceleași reguli ca şi pentru
variabilele SAS;
- n = numărul de elemente. Dacă numărul de elemente este necunoscut el se înlocuieşte cu
caracterul *

21
- $ = se foloseşte în cazul în care sunt referite variabile de tip caracter, de obicei când
acestea nu au fost definite;
- parantezele rotunde pot fi înlocuite cu paranteze pătrate sau acolade.
- lista_variabile. Trebuie să fie toate numerice sau toate alfanumerice - nu le puteți
amesteca.
Această sintaxă poartă denumirea de masiv explicit, în care numărul de variabile este specificat
la definire.
Pentru a referi o variabilă din masiv se va folosi sintaxa nume(index), indexul unui masiv
începând de la 1.

II.12.1. 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;

Instrucțiunea ARRAY este utilizată pentru a crea matricea.

 Puteți utiliza oricare dintre metodele de prescurtare SAS pentru a face trimitere la o listă de
variabile, cum ar fi Var1-Varn.
 Numărul din paranteze care urmează după numele matricei se numește un indice, chiar dacă
nu este o notație adevărată a indexului
 Prin plasarea matricei într-o buclă DO, puteți procesa fiecare variabilă în matrice.
 De asemenea, deoarece nu aveți nevoie sau nu doriți ca contorul de buclă DO să fie inclus în
setul de date SAS, să utilizați o instrucțiune DROP.
 Dacă doriți ca matricea să conțină variabile noi, trebuie să includeți un semn de dolar ($) și,
opțional, o lungime atunci când definiți matricea. De exemplu, pentru a crea o matrice de
variabile de tip caracter Q1-Q20, fiecare cu o lungime de 2 octeți, ați scrie următoarele:

array matrice{20} $ 2 Q1-Q20;

22
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. Să presupunem că exista un set de
date SAS tabela5 și doriți să creați un nou set de date numit tabela_Lipsă cu aceste modificări.
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;

Cuvântul cheie _CHARACTER_ este folosit ca listă de variabile. Deoarece această instrucțiune
urmează instrucțiunea SET, _CHARACTER_ include toate variabilele de caractere din setul de
date tabela5.

_CHARACTER_ menționează variabilele de caractere care sunt prezente în zona buffer la acel
moment din etapa DATA. De exemplu, dacă definiți variabilele de caractere A, B și C în primele
trei rânduri ale unui pas DATA și apoi folosiți referința _CHARACTER_ urmată de definirea
variabilelor de caractere D și E, numai variabilele A, B și C sunt menționate de către
_CHARACTER_ .

Dacă plasați instrucțiunea ARRAY înaintea instrucției SET, matricea nu face referință la nici o
variabilă.

Funcția DIM returnează numărul elementelor dintr-un matrice.

Programul următor realizează 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;

23
II.12.2. Utilizarea unei matrici pentru a crea noi variabile
De exemplu, dacă setul de date SAS avea variabile Fahren1-Fahren24 care conține 24 de
temperaturi de Fahrenheit, ați putea folosi o matrice pentru a crea 24 de variabile noi (de
exemplu, Celsius1-Celsius24) cu echivalentele Celsius
DATA temp;
INPUT Fahren1-Fahren24 @@;
ARRAY Fahren[24];
ARRAY Celsius[24] Celsius1-Celsius24;
DO Hour = 1 TO 24;
Celsius{Hour} = (Fahren{Hour} - 32)/1.8;
END;
DROP Hour;
DATALINES;
35 37 40 42 44 48 55 59 62 62 64 66 68 70 72 75 75
72 66 55 53 52 50 45
;

Setul de date Temp conține toate temperaturile de 24 de grade Fahrenheit și 24 de grade Celsius.
S-ar putea să vă întrebați de unde a apărut lista variabilelor în matricea FAHREN. Dacă omiteți
o listă de variabile într-o instrucțiune ARRAY și includeți numărul elementelor care urmează
numele matricei, SAS va crea automat nume de variabile pentru dvs., utilizând numele matricei
ca bază și adăugând numerele de la 1 la n, unde n este numărul elementelor din matrice.

În acest program, SAS creează variabilele Fahren1-Fahren24. Ați putea fi folosit această
caracteristică și pentru matricea Celsius.

II.12.3. Schimbarea limitelor matricei


Implicit, SAS numără elementele unui matrice începând de la 1. Există momente în care este util
să se specifice valorile de început și de sfârșit ale elementelor matrice. De exemplu, dacă aveți
variabilele Venit1999 la Venit2006, ar fi bine să aveți elemente de matrice începând cu 1999 și
încheind cu 2006.
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;

24
001 45000 47000 47500 48000 48000 52000 53000 55000
002 67130 68000 72000 70000 65000 52000 49000 40100
;

II.12.4. Matrici temporare


Puteți crea o matrice care are numai elemente și nu există variabile! Deşi sună ciudat, elementele
din matricele temporare sunt locuri excelente pentru a stoca valori sau pentru a efectua căutări de
tabele.
Dacă doriți, puteți atribui valorile inițiale ale elementelor de matrice atunci când creați matricea
temporară. Alternativ, puteți încărca valorile în matricea temporară din etapa DATA.

Oricum, valorile din matricea temporară sunt reținute automat (adică nu sunt setate la valori lipsă
atunci când etapa DATA se repetă). Astfel, acestea sunt locuri utile pentru stocarea valorilor de
care aveți nevoie în timpul executării etapei DATA.

Începem cu un exemplu care utilizează o matrice temporară pentru a stoca răspunsul corect
pentru fiecare din cele 10 întrebări dintr-un test cu mai multe opțiuni. Apoi puteți puncta testul
utilizând matricea temporară ca şi cheie de răspuns. Iată programul:

II.12. Realizarea de rapoarte agregate şi de detaliu


II.10.1. Afişarea datelor

Afişarea datelor se realizează cu ajutorul preocedurii PRINT (PROC PRINT).


De exemplu, există o tabelă numită tabela-vanzări care conţine următoarele informaţii: numele
angajatului care a efectuat vânzarea (Nume_ang) și codul de identificare al acestuia(Id_ang),
regiunea în care a efectuat vânzarea(Regiune), numele companiei căreia i sa făcut vânzarea
(Nume_client), codul produsului (Cod_prod), cantitatea (Cant), preţul unitar al produsului
(PU)și suma totală a vânzării (Total_vanzari) (Cant * PU).
Programul următor utilizează PROC PRINT cu toate valorile implicite:

TITLE "Raport Vânzări";


PROC PRINT DATA=tabela-vanzari;
RUN;

Procedura PRINT va afişa atâtea coloane câte încap pe lăţimea paginii, iar cele care nu încap vor
fi afişate după terminarea tutror observaţiilor. In plus, va apărea o coloană (cu antetul Obs) care
va conţine numărul current al fiecărui rând de observaţii.

25
Declarația VAR permite specificarea variabilelor care vor fi afişate şi ordinea lor. De exemplu,
dacă dorim să afişăm numai variabilele Nume_ang, Nume_client şi Nume_client, se va folosi
codul:

TITLE "Raport Vânzări";


PROC PRINT DATA=tabela-vanzari;
VAR Nume_ang Nume_client Total_vanzari;
RUN;

Dacă se doreşte omiterea coloanei care conţine numărul current şi înlocuirea ei cu o altă
variabilă, se foloseşte opţiunea ID:

TITLE "Raport Vânzări";


proc print data=tabela-vanzari;
ID Nume_ang;
VAR Nume_client Total_vanzari;
RUN;

Variabila (sau variabilele) pe care le plasați în instrucțiunea ID înlocuiește coloana Obs și este
afişată în coloana cea mai din stânga ale înregistrării.

Când plasează un nume de variabilă în opţiunea ID, nu nu trebuie inclus și în instrucțiunea VAR
deoarece variabila va apărea de două ori în listă.

O modalitate alternativă de a omite coloana Obs este de a folosi PROC PRINT cu opțiunea
NOOBS. Avantajul utilizării unei instrucțiuni ID este că variabila ID va apărea pe fiecare pagină
dacă există mai multe variabile decât încap într-o singură pagină.
Se poate schimba aspectul valorilor din lista prin asocierea unui format cu una sau mai multe
variabile (SAS are multe formate încorporate care pot adăuga virgule sau semne de dolari în cifre
sau pot afișa date în diferite moduri). De exemplu se doreşte ca valorile Total_vanzari să apară
cu semne de dolari și virgule. Acest lucru se realizează cu o opţiunea FORMAT la lista
Total_vanzari cu semne de dolari și virgule și Cant cu virgule:

TITLE "Raport Vânzări";


PROC PRINT DATA=tabela-vanzari;
ID Nume_ang;
VAR Nume_client Cant Total_vanzari;
FORMAT Total_vanzări dollar10.2 Cant comma7.;
RUN;

Se poate controla ce observații apar într-o listă prin includerea unei instrucțiuni WHERE în
procedură. De exemplu, dacă se doreşte ca listarea să conțină numai observații în cazul în care
cantitatea este mai mare de 400:

26
title "Raport Vânzări";
proc print data=tabela-vanzari;
where Cant gt 400;
ID Nume_ang;
VAR Nume_client Cant Total_vanzari;
format Total_vanzări dollar10.2 Cant comma7.;
run;

Dacă se doreşte afişareavânzăeilor doar a angajaţilor 1 şi 5 se utilizează operatorul IN (posibil de


utilizat pentru valori numerice sau character) împreună cu o instrucțiune WHERE.

title "Raport Vânzări";


proc print data=tabela-vanzari;
where EmpID in ('1' '5');
ID Nume_ang;
VAR Nume_client Cant Total_vanzari;
format Total_vanzări dollar10.2 Cant comma7.;
run;

In raport se pot adăuga linii de titlu suplimentare și una sau mai multe note de subsol.
Instrucțiunea TITLEn (unde n este un număr de la 1 la 10) permite să să se specifice mai multe
linii de titlu ( TITLE1 și TITLE sunt echivalente).

Instrucțiunea FOOTNOTEn vă permite să să se specifice de la 1 la 10 note de subsol, linii care


apar în partea de jos a paginii. Odată ce se scrie o instrucțiune TITLE sau FOOTNOTE, titlurile
sau notele de subsol se imprimă pe fiecare pagină a raportului, până când ele sunt modificațte
sau le anulate.

title1 "Compania ABX";


title3 "Cifre vanzari pentru anul fiscal 2018";
title4 "Raport rezlizat de Popescu Vasile";
title5 "-----------------------------";
footnote "Raportul este condidential";

proc print data=tabela-vanzari;


ID Nume_ang;
VAR Nume_client Cant Total_vanzari;
format Total_vanzări dollar10.2 Cant comma7.;
run;

Pentru a anula titlurile sau notele anterioare se utilizează instrucţiunile title; şi footnote;

27
Dacă se doreşte ca afişarea să fie într-o anumită ordine preocedura PROC PRINT va fi precedată
de o procedură PROC SORT (pentru a vedea înregistrările în ordine descendentă se folose ste
cuvântul cheie DESCENDING,
proc sort data= tabela-vanzari;
by descending Total_vanzari;
run;
title "Raport Vânzări";
proc print data=tabela-vanzari;
ID Nume_ang;
VAR Nume_client Total_vanzari;
run;

Dacă nu de doreşte ca setul de date original să se modifice, se adaugă o opțiune OUT = la


sortare. pentru a specifica un set de date de ieșire (care va fi un set de date temporar).
proc sort data= tabela-vanzari out=vazari;
by descending Total_vanzari;
run;
title "Raport Vânzări";
proc print data=tabela-vanzari;
ID Nume_ang;
VAR Nume_client Total_vanzari;
run;

Sortarea se poate realiza după mai multe variabile, de exemplu pentru ca observaţiile să fie
afişate în ordinea crescă toare a cos_angajat, iar pentru fiecare angajatm în ordinea
descrescătoare a vânzărilor, se poate folosi codul:

proc sort data= tabela-vanzari out=vazari;


by Cod_angajat descending Total_vanzari;
run;
title "Raport Vânzări";
proc print data=tabela-vanzari;
ID Nume_ang;
VAR Nume_client Total_vanzari;
run;

În mod implicit, raportul va conţine ca şi cap de table, numele variabilelor. Dacă se doreşte
utilizarea, în locul acestora, a etichetelor variabilelor se va utilize instrucţiunea LABEL (se va

28
utiliza o instrucțiune LABEL, fie în pasul DATA, fie o instrucțiune care urmează instrucțiunea
PROC PRINT. Se va adăuga o opțiune LABEL la instrucțiunea PROC PRINT).

title "Raport Vânzări";


proc print data=tabela-vanzari label;
ID Nume_ang;
VAR Nume_client Total_vanzari;
label Cod_angajat = "Cod Angajat"
Total_vanzari = "Vanzări totale"
Cant = "Cantitate vanduta";
run;

Se pot adăuga subtotaluri și totaluri la raport, incluzând instrucțiunile SUM și BY.

Pentru a include o instrucțiune BY în PROC PRINT, setul de date trebuie să fie ordonat anterior
în aceeași ordine.

De exemplu, dacă se doreşte defalcarea raportului pe regiuni, mai întâi se sortează setul de date
pe regiuni și se include o declarație BY în PROC PRINT.

proc sort data= tabela-vanzari out=vanzări;


by Region;
run;

title " Raport Vânzări ";


proc print data= tabela-vanzari label;
by Regiune;
ID Nume_ang;
VAR Nume_client Total_vanzari;
label Cod_angajat = "Cod Angajat"
Total_vanzari = "Vanzări totale"
Cant = "Cantitate vanduta";
run;

Dacă se doreşte ca fiecare regiune să apară pe o pagină separată, se include o instrucțiune


PAGEBY, precum și o instrucțiune BY în PROC PRINT. Pentru a include subtotaluri și totaluri
se includ declarații SUM .

proc sort data= tabela-vanzari out=vanzări;


by Region;
run;

title " Raport Vânzări ";


proc print data= vanzări label;
by Regiune;
ID Nume_ang;
29
VAR Nume_client Total_vanzari;
sum Cant Total_vanzari;
label Cod_angajat = "Cod Angajat"
Total_vanzari = "Vanzări totale"
Cant = "Cantitate vanduta";
format Total_vanzari dollar10.2 Cant comma7.;
run;

Dacă se include o instrucțiune BY și o instrucțiune ID, fiecare cu aceleași variabile, PROC


PRINT nu repetă variabila din prima coloană dacă valoarea nu sa schimbat.
proc sort data= tabela-vanzari out=vanzări;
by Region;
run;

title " Raport Vânzări ";


proc print data= vanzări label;
by Nume_ang;
ID Nume_ang;
VAR Nume_client Total_vanzari;
label Cod_angajat = "Cod Angajat"
Total_vanzari = "Vanzări totale"
Cant = "Cantitate vanduta";
format Total_vanzari dollar10.2 Cant comma7.;
run;

Prin includerea opțiunii N = în PROC PRINT, numărul total de observații din setul. de date se
imprimă în partea de jos a listei. Dacă se doreşte se poate utiliza formularea N = "eticheta dvs."
pentru a eticheta acest număr cu o etichetă aleasă de utilizator.
proc sort data= tabela-vanzari out=vanzări;
by Region;
run;

title " Raport Vânzări ";


proc print data= vanzări label n=”Numărul total de observaţii:”;
ID Nume_ang;
VAR Nume_client Total_vanzari;
label Cod_angajat = "Cod Angajat"
Total_vanzari = "Vanzări totale"
Cant = "Cantitate vanduta";
format Total_vanzari dollar10.2 Cant comma7.;
run;
Acest cod va genera o listă de tipul următor:
Raport Vânzări

30
Cod angajat Vanzări totale Cantitate vanduta
0017 $19,995.00 500
0017 $1,995.00 100
...
1843 $9,109.00 1
9888 $299.50 50
9888 $1,990.00 1,000
Numărul total de observaţii: 14
Opţiunea DOUBLE utilizată în PROC PRINT va dubla spaţiile dintre rânduri (proc print data=
vanzări double;)
Opţiunea OBS=n premite utilizată în PROC PRINT listarea primelor n observăţii (proc print
data= vanzări (obs=5);)
Pentru a lista un anumit număr de observaţii nu de la prima observaţie ci din alt punct, se va
combina opţiunea FIRSTOBS=n cu Opţiunea OBS=n (proc print data= vanzări (firstobs=4
obs=7);). De reţinut că n nu reprezintă numărul de obsevaţii care vor fi listate ci numărul
ultimei observaţii.
PROC PRINT uneori imprimă numele variabilelor pe verticală dacă numele variabilelor ocupă
mai mult spațiu decât următoarele linii de date. Dacă se doreşte ca PROC PRINT să mențină
numele variabilelor pe orizontală, se va include opțiunea HEADING = Horizontal (se poate
abrevia la HEADING = H) (proc print data= vanzări (obs=5) heading = horizontal;)

II.10.2. Crearea rapoartelor personalizate

Procedura PROC REPORT permite controlul aspectului fiecărei coloane de raport, obţinerea de
rapoarte de sinteză și listări detaliate.

Opțiunea NOWD (fără ferestre) este o instrucțiune care face să nu se intre în editorul de ferestre
interactiv după ce executați procedura.

Pentru variabilele de tip caracter, lățimea coloanei este fie lungimea variabilei caracter, fie
lungimea valorii formatate (dacă variabila are un format).

Pentru variabilele numerice, lățimea coloanei implicite este de 9 ori lățimea unui format (dacă
variabila este formatată).

O altă diferență între PROC PRINT și PROC REPORT este că titlurile coloanelor implicite
pentru PROC PRINT sunt nume de variabile, iar titlurile coloanelor implicite pentru PROC
REPORT sunt etichete variabile (dacă există) sau nume de variabile dacă o variabilă nu are o
etichetă.
31
Pentru a specifica variabilele pe care doriți să le includeți în raport, utilizați o instrucțiune
COLUMN.

Instrucțiunea COLUMN servește o funcție similară cu instrucțiunea VAR a PROC PRINT -


permite să selectați variabilele pe care le doriți în raport și ordinea în care acestea apar.

În plus, trebuie să listați variabilele pe care le creați în blocurile COMPUTE (discutate mai
târziu în acest capitol).
Spre deosebire de PROC PRINT, PROC REPORT este capabil să producă atât rapoarte
detaliate (lista tuturor observațiilor) cât și rapoarte sumarizate (raportarea statisticilor, cum ar fi
sumele – statistici implicite și medile).

Implicit, PROC REPORT produce

 rapoarte detaliate pentru variabilele de tip caracter


 și rapoartele sumarizate pentru variabilele numerice.

Cu toate acestea, atunci când se include un mix de ambele tipuri de variabile într-un singur
raport, se obţine o listă detaliată care prezintă toate observațiile.

Puteți utiliza o instrucțiune DEFINE pentru a specifica modul de folosire al fiecarei variabile;
utilizați o listă a tuturor observațiilor și utilizați ANALIZA pentru a crea un raport sumar.
Dacă variabilele sunt numerice şi se doreşte un raport de sinteză se poate utilize un program ca:
TITLE "Raport de sinteza pentru variabile numerice";
PROC REPORT DATA=exemple.date1 NOWD;
COLUMN varsta greutate;
RUN;
Rezultat:
Raport de sinteza pentru variabile numerice
Varsta
elev greutate
40 210

Să presupunem că doriți o listă detaliată a fiecărei persoane din setul de date date1 în locul unui
raport de sinteză. Ați putea folosi următorul program:

32
TITLE " Raport detaliat pentru variabile numerice";
PROC REPORT DATA=exemple.date1 NOWD;
COLUMN varsta greutate;
DEFINE varsta / DISPLAY "Varsta elev" WIDTH=2;
DEFINE greutate / DISPLAY WIDTH=3;
RUN;

 există acum o instrucțiune DEFINE pentru fiecare dintre cele două variabile numerice
 atributele pentru variabile sunt introduse ca opțiuni în instrucțiunea DEFINE (astfel, ele
urmează o bară după numele variabilei).
 opțiunea DEFINE DISPLAY este o instrucțiune pentru a obține o listă detaliată a tuturor
observațiilor.
 Pe lângă definirea utilizării ca DISPLAY, instrucțiunea DEFINE pentru varsta adaugă o
etichetă (plasată în ghilimele) și o lățime a coloanei.
Rezultatul este:
Raport detaliat pentru
Varsta
elev greutate
7 40
8 38
6 48
10 50
12 45

Realizarea unui Summary Report

Să presupunem ca doriti să listaţi media vârstei şi media greutăţii elevilor grupaţi pe clase. Pentru
a face acest lucru, trebuie să utilizați opţiunea GROUP pentru variabila clasa. În plus, trebuie să
specificați MEAN ca statistică pentru varsta și greutate.

TITLE "Utilizare optiune GROUP";


PROC REPORT DATA=exemple.date1 NOWD;
COLUMN clasa varsta greutate;
DEFINE clasa / GROUP WIDTH=2;
DEFINE varsta / ANALYSIS MEAN "Varsta medie" WIDTH=12
FORMAT=2.;
DEFINE greutate / ANALYSIS MEAN "Greutate medie" WIDTH=12
FORMAT=3.;
RUN;

33
PROC REPORT poate încadra linii de text într-o coloană atunci când există valori lungi.
Pentru a demonstra această caracteristică, aici este un raport care include o variabilă numită
Comentariu cu o lungime de 50 de caractere. Deoarece o valoare atât de lungă ar ocupa
majoritatea lățimii unei pagini, se poate utiliza opțiunea FLOW pentru a îmbunătăți aspectul
raportului. Iată codul pentru a realiza acest lucru:

PROC REPORT DATA=exemple.date1 NOWD HEADLINE


SPLIT=' ' LS=74;
COLUMN Id data gen inaltime greutate Comment;
DEFINE Id / "Numar matricol" WIDTH=7;
DEFINE data / "Data examinare" WIDTH=9 FORMAT=date9.;
DEFINE gen / "Gen elev" WIDTH=1 RIGHT;
DEFINE inaltime / "Inaltime" WIDTH=3;
DEFINE Greutate / WIDTH=2;
DEFINE Comment / WIDTH=30 FLOW;
RUN;

Opţiunea FLOW, adăugată la instrucțiunea DEFINE, restrânge câmpul de comentarii în lățimea


de coloană definită prin WIDTH=.

Opțiunea SPLIT = indică faptul că se doreşte ca la împărţirea comentariilor, între cuvinte să se


folosească spații libere. Fără această opțiune, PROC RAPORT ar folosi alte caractere, cum ar fi
slash-uri ca posibile pauze de linie.

Opțiunea RIGHT, utilizată pentru o variabilă, aliniază dreapta valorile acesteia. Alinierea
implicită pentru variabilele de tip alphanumeric este LEFT. Opțiunile de aliniere sunt LEFT,
RIGHT și CENTER.

34
35
Contents
II.13. Realizarea de analize statistice .......................................................................................... 1
II.13.1. Procedura UNIVARIATE - generarea de statistici descriptive ................................. 1
II.13.2. Procedura MEANS - crearea de rapoarte agregate .................................................... 2
II.13.3. Procedura FREQ – calcularea frecvenţelor ................................................................ 5
II.13.4. Procedura CORR – analiza de corelaţie ..................................................................... 6
II.13.5. Procedura REG - analiza de regresie.......................................................................... 7
II.13.6. Procedura ANOVA – analiza dispersională ............................................................... 7
II.14. Realizarea de grafice ......................................................................................................... 7
II.14.1. Procedura GCHART şi GPLOT ................................................................................. 7
II.14.1. Procedura GPLOT ...................................................................................................... 9

II.13. Realizarea de analize statistice


II.13.1. Procedura UNIVARIATE - generarea de statistici descriptive

Procedura UNIVARIATE, este folosită pentru examinarea distribuţiei datelor pentru o singură
variabilă, incluzând o evaluarea a normalităţii datelor şi identificarea valorilor extreme.
Pe lângă calcularea unor indicatori statistici de bază (care se vor regăsi şi în procedra MEANS),
UNIVARIATE poate include şi reprezentări grafice necesare pentru a analiza datele.
Sintaxa simplificată:

PROC UNIVARIATE <optiuni>;


VAR listă_variabile;
BY listă_variabile;
ID variabilă;
HISTOGRAM <listă_variabile>;

Fără declaraţia VAR, procedura va genera statistici pentru toate variabilele numerice ale setului
de date.
Opţiuni uzuale:
- DATA,
- NORMAL - prin opţiunea NORMAL sunt realizate teste de normalitate

1
- FREQ - generează tabele de frecvenţă ale variabilelor
- PLOT - produce trei tipuri de grafice:
 diagrama ramură-frunză (stem-leaf),
 diagrama box plot
 diagrama distribuţiei normale.
- BY - pentru a obţine analize separate pe grupe de valori.
- ID denumeşte variabila care identifică observaţiile în locul numărului observaţiei,
- HISTOGRAM construieşte un grafic de tip histogramă.
Implicit, procedura afişează cinci dintre valorile cele mai mici şi mai mari ale variabilei analizate
şi numărul observaţiei care are aceste valori extreme.
- NEXTROBS= pentru a afişa un alt număr de valori extreme
- NEXTRVAL= pentru a afişa cele mai mici şi mai mari valori distincte
- NEXTROBS=0 pentru a suprima afişarea tabelei cu observaţiile extreme

II.13.2. Procedura MEANS - crearea de rapoarte agregate

Procedura MEANS are rolul de a crea rapoarte agregate prin generarea de diferiţi indicatori
statistici pentru variabilele de tip numeric. De asemenea, poate fi folosită pentru a crea seturi de
date agregate care pot fi ulterior analizate cu ajutorul altor secţiuni de date sau proceduri.
Implicit, PROC MEANS produce statistici privind toate variabilele numerice din setul de date
SAS de intrare.
Statisticile implicite produse sunt N (numărul de valori care nu lipsesc), Mean (medie), Std Dev
(deviația standard), Minimum şi Maximum. Prin adăugarea oricărui indicator, procedura nu va
mai calcula indicatorii impliciţi, aceştia trebuind adăugaţi.

Sintaxa:

PROC MEANS indicatori;


Unde:
- indicatori reprezintă tipuri de indicatori statistici.
Exemple de indicatori care pot fi utilizaţi:
MAX – valoarea maximă
MIN – valoarea minimă
MEAN – media
N – numărul de valori nenule
NMISS – numărul de valori lipsă
SUM – suma

2
MEDIAN – mediana
STD - deviatia standard
VAR – dispersia
Intervalul de încredere implicit pentru calculul mediei este acela al nivelului de
semnificaţie 0.05, adică 95%. Dacă se doreşte specificarea unui alt interval de încredere,
acest lucru trebuie realizat folosind opţiunea ALPHA împreună cu indicatorul CLM
(limitele intervalului de încredere).

Se pot adăuga următoarele declaraţii opţionale:


- BY lista_variabile – realizează analize separate pentru fiecare nivel al variabilelor din listă.
Datele trebuie să fie în prealabil sortate în aceeaşi ordine în care apar variabilele din
lista_variabile.
- CLASS lista_variabile – realizează tot analize separate pentru fiecare nivel al variabilelor,
însă rezultatele sunt prezentate mai compact faţă de declaraţia BY, iar datele nu trebuie
sortate.
O caracteristică foarte utilă a utilizării unei instrucțiuni CLASS (pe lângă faptul că nu trebuie
ca datele să fie sortate ) este că SAS utilizează valori formate ale variabilelor CLASS. Se
poate adăuga o instrucțiune FORMAT la procedură schimbând modul în care variabila
CLASS grupează datele, fără a fi nevoie să să se modifice setul de date original.
- VAR lista_variabile – specifică variabile analizate.
- MAXDEC = controlează numărul de locuri din dreapta punctului zecimal care sunt tipărite
în ieșire.

PROC MEANS DATA=exemple.produse n nmiss mean median


MIN MAX MAXDEC=1;
BY categorie;
VAR cant pret;
RUN;

PROC FORMAT;
VALUE f_calitate_grup
LOW -< 10 = 'Scazuta'
10 - HIGH = 'Ridicata';
RUN;
PROC MEANS DATA=exemple.produse n nmiss mean median
MIN MAX MAXDEC=1;
CLASS cal;
FORMAT cal f_calitate_grup
VAR cant pret;
RUN;

3
N N
Calitate Obs Variable N Miss Mean Median
Scazuta 384 cant 352 32 5.5 5.5
pret 351 33 6938.2 6910.0
Ridicata 411 cant 376 35 5.5 5.5
pret 374 37 7138.9 7130.0

Scrierea statisticilor agregate într-un set de date


Uneori este necesară salvarea statisticilor agregate într-un set de date pentru analize ulterioare
sau pentru combinarea cu alte date.

OUTPUT OUT = set-date lista-statistici-iesire;


unde:
- set-date - setul de date care va conţine rezultatele;
- lista-statistici-iesire - conţine indicatorii statistici care se vor calcula şi numele variabilelor
asociate cu aceştia.
Un format posibil pentru această listăde ieşire este:

statistica (lista_variabile)=lista_nume
 statistica - unul dintre indicatorii statistici disponibili cu procedura MEANS;
 lista_variabile - pentru ce variabile se vor calcula indicatorii;
 lista_nume - noile nume de variabile asociate indicatorilor statistici.
NOPRINT rezultatele nu se vor mai afişa pe ecran, ci vor fi direcţionate doar către setul de date
de ieşire.
PROC MEANS DATA=exemple.produse NOPRINT;
VAR cant pret;
OUTPUT OUT = my_summary
MEAN = MedieCant MediePret;
RUN;
PROC PRINT DATA=my_summary NOOBS;
RUN;

Unde variabila MedieCant contine media valorilor din variariabila cant iar variabila MediePreţ
contine media valorilor din variariabila prêt.

4
II.13.3. Procedura FREQ – calcularea frecvenţelor
PROC FREQ poate fi utilizată pentru a calcula frecvențele atât a variabilelor de caractere, cât și
a celor numerice, în tabele unidimensionale, bidimensionale și cu tridimensionale. În plus, pot
crea seturi de date de ieșire care conțin numere și procente.
In mod implicit se calculează frecvenţele, numerice şi procentuale, frecvenţele vumulative
numerice şi frecvenţele cumulative procentuale, pentru toate variabilele din setul de date.

Sintaxa:
PROC FREQ DATA = date_intrare <optiuni>;
TABLES combinatii_variabile <optiuni>;

Instrucţiunea TABLES - defineşte variabilele pentru care se creează tabele de frecvenţe.


- pentru tabelele de frecvenţe unidimensionle, se specifică numele variabilei,
- pentru tabele de frecvenţe multidimensionale se scrie o expresie de tipul
var1*var2*...*varn.

Opţiuni ale instrucţiunii TABLES care controlează modul de afişare:


- LIST – afişează tabelele multidimensionale în format listă, nu tabelar;
- MISSING – include valorile lipsă în statistici;
- NOCOL – suprimă afişarea procentelor coloanelor în tabelele de frecvenţă;
- NOROW – suprimă afişarea procentelor rândurilor în tabelele de frecvenţă;
- NOCUM – suprimă afişarea frecvenţelor şi procentelor cumulate în tabelele
unidmensionale. Deoarece NOCUM este o opțiune în instrucțiunea TABLES, este
urmată de caracterul / (aceasta este sintaxa pentru toate opțiunile de instrucțiuni din
cadrul unei proceduri)
- NOPERCENT – suprimă afişarea tuturor procentelor în tabelele de frecvenţe.
- OUT = set_date – scrie un set de date care conţine frecvenţele.
Tabele de frecvenţe bidirecționale se pot realiza specificând variabilele rând și coloană într-o
instrucțiune TABLES, separate de un asterisc (*).
TABLES var1 * var2;

Se pot solicita mai multe tabele bidimensionale în mai multe moduri. De exemplu, dacă doriți să
vedeți o variabilă de rând defalcată în funcție de mai multe variabile de coloană, puteți utiliza o
instrucțiune TABLES astfel:

TABLES A * (B C D);

Această instrucțiune generează trei tabele: A cu B, A cu C și A cu D.

5
Puteți furniza o listă de variabile (în paranteze) atât pentru variabilele rând și coloană, cum ar fi:

TABLES (A B) * (C D);

Această solicitare generează patru tabele: A cu C, A cu D, B cu C și B cu D.

II.13.4. Procedura CORR – analiza de corelaţie

Procedura CORR, inclusă în BASE SAS, are rolul de a calcula corelaţii între două variabile, prin
intermediul coeficienţilor de corelaţie.

Sintaxa:
PROC CORR DATA = set_date;
VAR lista_variabile;
WITH lista_variabile;

RUN;

 Fără declaraţiile VAR şi WITH, procedura calculează corelaţii între toate variabilele
numerice care se găsesc în setul de date SAS cel mai recent utilizat.
 Variabilele specificate în declaraţia VAR vor apărea în partea de sus a tabelului de
corelaţie,
 Variabilele specificate în declaraţia WITH vor apărea în stânga tabelului.
 Implicit, procedura CORR calculează coeficientul de corelaţie al lui Pearson.
 Se pot adăuga opţiuni prin care se pot calcula alţi coeficienţi, precum SPEARMAN sau
KENDALL.
DATA produse;
INPUT Cantitate Pret;
DATALINES;
56 6 2 78
44 9 0 76
85 1 6 67
64 4 1 73
87 8 4 73
78 5 2 69
;
RUN;
PROC CORR DATA = produse;
VAR Cantitate;
WITH Pret;
RUN;

6
II.13.5. Procedura REG - analiza de regresie

Procedura REG (parte a modulului SAS/STATrealizează analiza de regresie liniară.

Sintaxa:

PROC REG DATA = set_date;


MODEL var_dependenta = var_independenta;
PLOT var_dependenta * var_independenta;

În declaraţia MODEL, variabila dependentă este plasată în stânga semnului “=”, iar variabila(le)
independente în partea dreaptă.
Declaraţia PLOT este una dintre multele opţiuni ale procedurii prin intermediul acesteia
realizându-se diferite diagrame de corelaţie.

II.13.6. Procedura ANOVA – analiza dispersională

ANOVA (parte a SAS/STAT) este una dintre procedurile disponibile în SAS pentru efectuarea
de analize dispersionale. Procedura este special proiectată pentru a lucra cu date echilibrate, unde
există acelaşi număr de observaţii pentru fiecare variabilă de clasificare.

Sintaxa:
PROC ANOVA DATA = set_date;
CLASS listă_variabile;
MODEL dependenta = explicative;
MEANSexplicative /optiuni;

 CLASS trebuie scrisă înainte de MODEL şi defineşte variabila(le) de clasificare.


 MODEL defineşte variabila dependentă şi variabilele explicative.
 MEANS calculează media variabilei dependente pentru oricare din variabilele explicative
speficate în MODEL.
 Se pot efectua mai multe tipuri de teste de comparaţie pentru medii, precum SCHEFFE sau
testul t al lui Bonferroni (BON).

II.14. Realizarea de grafice


II.14.1. Procedura GCHART şi GPLOT

Pentru realizarea de grafice cu opţiuni mai avansate în SAS este necesar modulul SAS/GRAPH

7
Şi BASE SAS permite construirea de grafice (prin procedurile CHART şi PLOT), însă acestea
au doar opţiuni de bază în ceea ce priveşte modul de prezentare.
Afişarea graficelor este controlată prin opţiuni grafice globale precum GOPTIONS, SYMBOL
sau PATTERN, al căror effect rămâne valabil între prelucrări şi care sunt aditive (spre exemplu,
dacă setăm două elemente grafice şi, ulterior, modificăm unul dintre ele, celălalt element rămâne
valabil). Opţiunea RESET=ALL resetează toate opțiunile grafice la valorile lor implicite.

SYMBOL - definește simbolurile de plotare și stilurile de linie),

PATTERN - definește stilurile pentru graficele cu bare

AXIS - definește axele orizontale și verticale.

Sintaxa:

PROC GCHART DATA = set_date;


HBAR | HBAR3D | VBAR | VBAR3D lista_var_grafic / <optiuni>;
PIE | PIE3D | DONUT lista_var_grafic / <optiuni>;
STAR lista_var_grafic / <optiuni>;
Declaraţiile care urmează după numele procedurii definesc tipul de grafic construit, astfel:
- HBAR – Grafic cu bare orizontale
- HBAR3D – Grafic cu bare orizontale 3D
- VBAR – Grafic cu bare verticale
- VBAR3D – Grafic cu bare verticale 3D
- PIE – Grafic de tip Pie
- PIE3D – Grafic de tip Pie 3D
- DONUT– Grafic de tip inel
- STAR– Grafic de tip stea

Opţiuni:
- SUMVAR – arată variabilele pentru care se calculează indicatorul statistic;
- TYPE – tipul de indicator statistic.
- GROUP grupează datele înfuncţie de valorile variabilei de clasificare pe care o referă
- SUBGROUP pentru a reprezenta valorile variabilei adăugate, foloseşte şabloane diferite
în cadrul fiecărei coloane
- Opțiunea NOHEADING elimină heading-ul implicit

PATTERN VALUE=EMPTY;

8
PROC GCHART DATA=exemple.produse;
VBAR pret;
RUN;
QUIT;
Instrucțiunea PATTERN cere ca barele din graficul vertical al barei să aibă doar contur (implicit
sunt pline) în contradicţie cu PATTERN VALUE = SOLID;.

II.14.1. Procedura GPLOT

Procedura GPLOT se poate folosi pentru a construi un grafic care arată legătura între două
variabile.

Sintaxa:

PROC GPLOTDATA = set_date;


PLOT variabila_Y*variabila_X / <optiuni>;

- declaraţia PLOT specifică cele două variabile care se reprezintă pe axele graficului.
- declaraţia SYMBOL adăuga anumite simboluri care să reprezinte intersecţia valorilor
variabilelor şi se pot conecta punctele prin linii drepte sau curbe.
- opţiunea INTERPOL= (prescurtat I=) ajută la conectarea punctelor şi poate lua valori
precum join (uneşte cu linii drepte) sau sm (uneşte prin linie continuă),
- opţiunea WIDTH= controlează lăţimea liniei.

SYMBOL VALUE=DOT;
PROC GPLOT DATA=exemplu.produse;
plot cant * pret / HAXIS=70 TO 120 BY 5
VAXIS=100 TO 220 BY 10;
RUN;

- Opțiunea VALUE = specifică faptul că pentru simbol pentru plotare de va fi caracterul


punct.
- Opțiunile HAXIS și VAXIS controlează intervalele pe axele orizontale și verticale.
- La instrucțiunea SYMBOL se poate adăuga o opțiune de pentru a cere ca punctele să fie
îmbinate printr-o linie dreaptă sau curbă - opțiunea INTERPOL = (sau doar I =) are
numeroase opțiuni care controlează aspectul plotului.
 Opțiunea JOIN conectează punctele cu linii drepte.

9
 Opțiunea WIDTH = controlează lățimea valorilor liniei mai mari, dând astfel
linii mai întunecate.
 Opțiunea LINE = vă permite să selectați tipurile de linii (1 = 0, valoarea
implicită).
 O a doua instrucțiune TITLE este de asemenea utilizată, cu înălțimea setată la
1.2 unități.

TITLE "Titlu1";
TITLE2 h=1.2 " Titlu1";
SYMBOL VALUE=DOT INTERPOL=JOIN WIDTH=2;
PROC GPLOT DATA=exemplu.produse;
PLOT cant var;
RUN;

10
Contents
1. Introducere ........................................................................................................................................... 2
2. Elemente de programare .............................................................................................................. 3
2.1. Tipuri de date ................................................................................................................................ 3
2.1.1. Numeric (int, float, complex) ................................................................................................ 3
2.1.2. Şiruri de caractere ................................................................................................................. 4
2.2. Variabile ........................................................................................................................................ 4

2.2.1.Tipuri de variabile – Colecţii de date ............................................................................................ 5

2.2.1.1. Liste .......................................................................................................................................... 5


2.2.1.2. Tupluri ...................................................................................................................................... 6
2.2.1.3. Seturi ....................................................................................................................................... 6
2.2.1.4. Dicţionare ................................................................................................................................ 7
2.3. Operatori ............................................................................................................................................ 9
2.4. Structuri de programare ..................................................................................................................... 9

2.4.1 Structuri alternative – Clauza IF ................................................................................................ 10

2.4.2. Structuri repetitive – Clauza for ............................................................................................... 11

1
1. Introducere
Python este un limbaj de programare ușor de învățat. Are structuri de date la nivel înalt și o
abordare simplă, dar eficientă, a programării orientate obiect. Sintaxa elegantă și scrierea dinamică
a lui Python, împreună cu natura sa interpretată, îl fac un limbaj ideal pentru scrierea și dezvoltarea
rapidă a aplicațiilor în multe zone de pe majoritatea platformelor.
Free și Open Source - Python este un exemplu de FLOSS (Free / Libré și Open Source Software).
În termeni simpli, puteți să distribuiți gratuit copii ale acestui software, să citiți codul sursă, să
efectuați modificări și să folosiți bucăți din acesta în noile programe gratuite. FLOSS se bazează
pe conceptul unei comunități care împărtășește cunoștințele. Acesta este unul dintre motivele
pentru care Python este atât de bun - a fost creat și este în mod constant îmbunătățit de o comunitate
care vrea doar să vadă un Python mai bun.
Portabil - Datorită naturii sale cu sursă deschisă, Python a fost portat (adică modificat pentru a funcționa)
pe multe platforme. Toate programele Python pot funcționa pe oricare dintre aceste platforme fără a
necesita modificări, dacă sunteți suficient de atent pentru a evita orice funcții dependente de sistem. Puteți
folosi Python pe GNU / Linux, Windows, FreeBSD, Macintosh, Solaris, OS / 2, Amiga, AROS, AS / 400,
BeOS, OS / 390, z / OS, Palm OS, QNX, VMS, Psion, Acorn RISC OS, VxWorks, PlayStation, Sharp
Zaurus, Windows CE și PocketPC! Puteți chiar utiliza o platformă ca Kivy pentru a crea jocuri pentru
computer și pentru iPhone, iPad și Android.
Orientat Obiect - Python susține programarea orientată spre procedură, precum și programarea
orientată pe obiecte. În limbile orientate spre proceduri, programul este construit în jurul unor
proceduri sau funcții care nu sunt decât piese de program reutilizabile. În limbajele orientate pe
obiecte, programul este construit în jurul obiectelor care combină date și funcționalități. Python
are o modalitate foarte puternică, dar simplistă de a face OOP, mai ales atunci când este comparată
cu limbi mari precum C ++ sau Java.
Extensibil - Dacă aveți nevoie de o bucată critică de cod pentru a rula foarte repede sau doriți să
nu aveți o bucată de algoritm care să nu fie deschisă, puteți să codificați acea parte a programului
în C sau C++ și apoi să o utilizați din programul dvs. Python.
Încorporabil - Puteți încorpora Python în programele C / C ++ pentru a oferi capabilități de
scripting pentru utilizatorii programului dvs.
Biblioteci extinse - Biblioteca standard Python este într-adevăr imensă. Acesta vă poate ajuta să
faceți diverse lucruri care implică expresii regulate, generarea de documente, testarea unităților,
filetarea, baze de date, browsere web, CGI, FTP, email, XML, XML-RPC, HTML, fişiere WAV,
criptografie, GUI (graphical user interfaces) și alte facilităţi dependente de sistem. Amintiți-vă,
toate acestea sunt întotdeauna disponibile oriunde este instalat Python. Aceasta se numește
filosofia “bateriilor incluse” din Python. Pe lângă biblioteca standard, există și alte biblioteci de
înaltă calitate pe care le puteți găsi la Python Package Index.
Comentarii - încep cu caracterul #
Constante literare - un exemplu de constanta literala este un numar ca 5, 1.23 sau un sir ca "Acesta
este un sir" sau "Este un sir!". Ea reprezintă întotdeauna el însuși și nimic altceva - este o constantă
deoarece valoarea sa nu poate fi schimbată.

2
Numerele - sunt în principal de două tipuri - întregi și float. Un exemplu de număr întreg este 2,
care este doar un număr întreg. Exemple de numere float sunt 3.23 și 52.3E-4. Notația E indică
puteri de 10. În acest caz, 52.3E-4 înseamnă 52.3 * 10 ^ -4 ^
Siruri de caractere - Puteți specifica șiruri de caractere utilizând ‘şir de caractere’ sau "şir de
caractere ". Puteți specifica șiruri de caractere pe mai multe linii utilizând ghilimele triple - """.
Puteți utiliza ghilimele simple și ghilimele duble în cadrul ghilimelilor triple.
Fiecare instrucţiune se scrie pe un rând. Dacă se doreşte scrierea mai multor instrucţiuni pe
acelaşi rând se folodeşte ; (i = 5; print(i);)
Indentare – Caracterul spațiul este important în Python. Spațiul principal (spațiile și tab-urile) de
la începutul liniei logice este utilizat pentru a determina nivelul de indentare al liniei logice, care
la rândul său este folosit pentru a determina gruparea de declarații. Aceasta înseamnă că
declarațiile care merg împreună trebuie să aibă aceeași indentare. Fiecare astfel de set de declarații
se numește bloc. O indentare greșită poate da naștere unor erori.
Metoda format() - Uneori este posibil să dorim să construim șiruri din alte informații.
Programul
varsta = 20
nume = 'Popescu'
print('{0} a avut {1} ani cand a scris aceasta carte'.format(nume,
varsta))
print('De ce {0} a scris aceasta carte?'.format(nume))

va avea ca ieşire
Popescu a avut ani cand a scris aceasta carte
De ce Popescu a scris aceasta carte?

Pentru a combina un şir de caractere cu o variabilă, utilizăm +, care are rolul de a concatena:

x = "pachete software"
print("Seminar " + x)

sau
x = "Seminar "
y = "Pachete Software"
z= x+y
print(z)

2. Elemente de programare

2.1. Tipuri de date


2.1.1. Numeric (int, float, complex)
 Variabile de tipul numeric sunt create atunci cand li se atribuie valoare. Nu
necesita declarare.

3
 Int sau integer reprezintă un număr întreg, pozitiv sau negativ, fără zecimale, de
lungime nelimitată.
 Float reprezintă un număr pozitiv sau negativ, cu una sau mai multe zecimale.
 complex conţin "j" care desemnează partea imaginară.
2.1.2. Şiruri de caractere
 marcate cu “ ” sau ‘ ’
 Sunt considerate ca vectori.
 Parantezele [ ] sunt utilizate pentru a accesa elementele şirului.
 Pentru şirul a = "Seminar pachete software"
o obţinerea caracterului de la poziţia 1 (primul caracter are poziţia 0):
print(a[1])
 extragerea unui subşir. Obţinerea caracterelor de la poziţia 2 la 5 (exclusiv):
print(a[2:5])
 returnarea lungimiia şirului - metoda len(): print(len(a))
 transformarea şirul în litere mici - metoda lower(): print(a.lower())
 transformarea şirul în litere mari - metoda upper(): print(a.upper())
 înlocuirea unui şir cu un alt şir - metoda replace():print(a.replace(" ", ""))
 împărţirea şirului în mai multe şiruri după un separator - metoda split():
print(a.split(",")) face să se obţină o lista de valori ['Seminar', ' pachete
software']

2.2. Variabile
 În Python, variabilele sunt case-sensitive.
 Denumirea variabilelor trebuie să înceapă cu o literă sau underscore (nu cu un număr)
şi poate conţine numai caractere alfanumerice: de la A-z, 0-9 şi underscore.
 Spre deosebire de alte limbaje, în Pythono variabilă nu se declară neapărat explicit, fiind
necesar să i se atribuie valoare.
 Nu este necesar să se precizeze tipul de data al variabilei
x=5
y = "Python"
print(x)
print(y)
 Tipul de data al variabilei poate fi schimbat ulterior
x = 4 - x este de tip int
x = "Python" - x este de tip str
print(x)
 Specificarea tipului de dată pentru o variabilă
Atunci când se doreşte specificarea tipului de dată pentru o variabilă, utilizăm următorii
constructori:
– int() - construieşte un număr întreg dintr-un număr întreg, un număr cu zecimale
(prin eliminarea zecimalelor) sau un şir de caractere (când şirul reprezintă un număr
întreg);

4
– float() - construieşte un număr cu zecimale dintr-un număr întreg, un număr cu
zecimale sau un şir de caractere (când şirul reprezintă un număr întreg sau un număr cu
zecimale);
– str() - construieşte un şir de caractere dintr-o varietate de tipuri de date, incluzând
şiruri de caractere, numere întregi şi numele cu zecimale.

2.2.1.Tipuri de variabile – Colecţii de date

2.2.1.1. Liste
– Listă este o structură de date care deține o colecție ordonată de elemente
 Permite elemente identice.
 Elementele sunt despărţite prin virgula.
 Lista de articole ar trebui să fie închisă în paranteze pătrate [ ].
 După ce ați creat o listă, puteți să adăugați, să eliminați sau să căutați elemente din listă.
 Elementele pot fi modificate.

Metoda Descriere
Crearea şi afişarea unei liste lista = ["laptop", "creion", "flipchart"]
print(lista)
Accesarea elementelor din listă se lista = ["laptop", "creion", "flipchart"]
realizează prin index: print(lista[1])
Modificarea unui element: lista = ["laptop", "creion", "flipchart"]
lista[1] = "carioca"
print(lista)
append() Adaugă un element la sfârşitul listei lista = ["laptop", "creion", "flipchart"]
lista.append("rucsac")
print(lista)
clear() Elimină toate elementele listei lista = ["laptop", "creion", "flipchart"]
(golirea listei) lista.clear()
print(lista)
copy() Crează o copie a listei
Del() Ştergerea întreagii liste lista = ["laptop", "creion", "flipchart"]
del lista
Eliminarea elementului de la indexul lista = ["laptop", "creion", "flipchart"]
specificat del lista [0]
print(lista)
len() Determinarea numărului de lista = ["laptop", "creion", "flipchart"]
elemente din listă - metoda print(len(lista))

count() Returnează numărul de apariţii al


elementului în listă

5
extend() Adăugă elemente la sfârşitul unei
liste
index() Returnează indexul unui element
insert() Adaugă un element la poziţia lista = ["laptop", "creion", "flipchart"]
specificată lista.insert(1, "rucsac")
print(lista)
pop() Elimină elementul de la poziţia lista = ["laptop", "creion", "flipchart"]
specificată sau ultimul element în lista.pop()
cazul în care indexul nu este print(lista)
specificat
remove() Elimină elementul specificat lista = ["laptop", "creion", "flipchart"]
lista.remove("laptop")
print(lista)
reverse() Inversează ordinea elementelor în
listă
sort() Sortează lista
list() Crearea unei liste prin intermediul lista = list(("laptop", "creion",
constructorului list(). "flipchart")) #observaţi parantezele
rotunde duble
print(lista)

2.2.1.2. Tupluri
 colecţii de date ordonate şi nemodificabile.
 tuplurile permit elemente identice.
 sunt reprezentate utilizând ( )

Metoda Descriere
Crearea şi afişarea unui tuplu: tuplu = ("laptop", "creion", "flipchart")
print(tuplu)
Accesarea elementelor din tuplu se tuplu = ("laptop", "creion", "flipchart")
realizează prin index print(tuplu[1])

Modificarea unui element nu este tuplu = ("laptop", "creion", "flipchart")


posibilă, tuplul rămâne nemodificat. tuplu[1] = "carioca"
TypeError: 'tuple' object does
not support item assignment
count() Returnează numărul de apariţii al
elementului în tuplu
index() Returnează poziţia unui element în
tuplu

2.2.1.3. Seturi

6
Seturile sunt colecții neordonate de obiecte simple. Acestea sunt folosite atunci când existența
unui obiect într-o colecție este mai importantă decât ordinea sau de câte ori apare.

Folosind seturi, puteți testa pentru apartenență, indiferent dacă este vorba de un subgrup al altui
set, găsiți intersecția dintre două seturi și așa mai departe.

 Colecţii de date neordonate


 Neindexate
 Nu pot fi modificate elementele unui set
 Nu sunt acceptate elemente identice.
 Accesarea elementelor din set nu este posibilă,
 Seturile sunt reprezentate prin { }
 Elementele pot fi parcurse cu for
 Existenţa unui element poate fi verificată cu in
 Crearea şi afişarea unui set (fiind elemente neordonate, afişarea este aleatoare)
set = {"laptop", "creion", "flipchart"}
print(set)

add() Adaugă un element


clear() Elimină toate elementele setului
copy() Returnează o copie a setului
difference() Returnează un set reprezentând diferenţa dintre două
sau mai multe seturi
difference_update() Elimină elementele dintr-un set care sunt conţinute de
un alt set specificat
discard() Elimină un element specificat
intersection() Returnează un set reprezentând intersecţia a două seturi
intersection_update() Elimină elementele dintr-un set care nu sunt în alt set
isdisjoint() Arată dacă două seturi se intersectează sau nu
issubset() Arată dacă un set este inclus într-un alt set sau nu
issuperset() Arată dacă un set conţine un alt set sau nu
pop() Elimină un element
remove() Elimină elementul specificat
symmetric_difference() Returnează un set cu elementelenecomune celor doua
seturi
symmetric_difference_update() Inserează într-un set diferenţele dintre două seturi
union() Returnează un set reprezentând reuniunea a două seturi
update() Actualizează setul cu reuniunea dintre un set şi altele

2.2.1.4. Dicţionare

7
Un dicționar este ca o agendă unde găsiți adresa sau datele de contact ale unei persoane, cunoscând
doar numele acesteia, adică asociăm cheile (numele) cu valorile (detalii). Rețineți că cheia trebuie
să fie unică, la fel cum nu puteți afla informațiile corecte dacă aveți două persoane cu același
nume.

 Colecţii de date neordonate,


 Modificabile
 Indexate.
 Nu sunt admise elemente identice
 Reprezentate prin { }
 Au suplimentar chei şi valori.

Crearea şi afişarea unui dicţionar:


dictionar = {"laptop":"IBM", "creion":"FaberCastell", "flipchart":"M3"}
print(dictionar)
Accesarea elementelor din dicţionar se realizează
 prin cheie:
dictionar = {"laptop":"IBM", "creion":"FaberCastell", "flipchart":"M3"}
x = dictionar["laptop"]
print(x)
 sau prin metoda get():
print(dictionar.get("laptop"))
Modificarea unui element din dicţionar se realizează prin cheie:
dictionar = {"laptop":"IBM", "creion":"FaberCastell", "flipchart":"M3"}
dictionar["laptop"] = "HP"
print(dictionar)

Metoda Descriere
clear() Elimină toate elementele din dicţionar
copy() Returnează o copie a dicţionarului
fromkeys() Returnează un dicţionar cu chei valori specificate
get() Returnează valoarea pentru o anumită cheie
items() Returnează o listă conţinând un tuplu pentru fiecare pereche cheie-valoare
keys() Returnează o listă conţinând cheile dicţionarului
pop() Elimină elementul având o anumită cheie specificată
popitem() Elimină ultima pereche adăugată cheie valoare
setdefault() Returnează valoarea pentru o cheie specificată. Dacă cheia nu există, o adaugă
update() Actualizează dicţionarul cu perechile cheie-valoare specificate
values() Returnează o listă cu toate valorile dicţionarului

8
2.3. Operatori
Tip Operator Denumire Exemplu
+ Adunare x+y
- Scădere x-y
Aritmetici * Înmulţire x*y
/ Împărţire x/y
% Restul împărţirii x%y
** Exponenţial x ** y
// Partea întreagă a împărţirii x // y
== Egal x == y
!= Diferit x != y
Comparaţie
> Mai mare x>y
< Mai mic x<y
>= Mai mare sau egal x >= y
<= Mai mic sau egal x <= y
and Returnează True dacă ambele expresii sunt x < 5 and x <
adevărate 10
Logici
or Returnează True dacă cel puţin o expresie este x < 5 or x < 4
adevărată
not Negaţia, inversează rezultatul returnând False not(x < 5 and
dacă rezultatul este adevărat x < 10)
= x=5 x=5
+= x=x+3 x += 3
-= x=x-3 x -= 3
Atribuire
*= x=x*3 x *= 3
/= x=x/3 x /= 3
%= x=x%3 x %= 3
//= x = x // 3 x //= 3
**= x = x ** 3 x **= 3
is Returnează True dacă ambele variabile sunt x is y
Identitate
acelaşi obiect
is not Returnează True dacă ambele variabile nu sunt x is not y
acelaşi obiect
in Returnează True dacă o secvenţă cu o valoare x in y
Apartenenţă
specificată este prezentă în obiect
not in Returnează True dacă o secvenţă cu o valoare x not in y
specificată nu este prezentă în obiect

2.4. Structuri de programare


Chiar dacă în alte limbaje indentarea nu e relevantă, în Python indentarea este esenţială, fiind
utilizată pentru a indica un bloc de cod.

9
2.4.1 Structuri alternative – Instrucţiunea IF
Sintaxa
if condiţie:
instructiune
instructiune
……
guess < number:
instructiune
instructiune
……
else:
instructiune
instructiune
……
instrucţiune din afara If (Această ultimă instrucțiune este întotdeauna executată după executarea
instrucțiunii if.)
Clauza elif care combină efectiv două declarații if else - if else într-o singură declarație combinată
if-elif-else. Acest lucru face ca programul să fie mai ușor și reduce cantitatea de indentare necesară.
Declarațiile elif și else trebuie să aibă simbolul : la sfârșitul liniei logice urmate de blocul de
declarații corespunzător (cu indentare corespunzătoare, desigur)
O instrucțiune if poate fi imbricată.
Pentru introducerea unor valori de la tastatura, se utilizează funcţia predefinită input

x = 23
Exemplu: y = int(input(Introduceti un numar: '))

if y == x:
print(‘Ai ghicit')
START print('Felicitari')
elif y < x:
print(‘Y < X’)
X = 23 else:
print(‘Y < X’)

Citeste Y print('Gata')

NU DA
Y=X
NU DA
Afiseaza “Ai ghicit”
Y<X

Afiseaza “Y > X” Afiseaza “Y < X” “Felicitari”

Afiseaza “Gata”

STOP

10
2.4.2. Structuri repetitive – Instrucţiunile WHILE şi FOR
Instrucţiunea While

Instrucțiunea while permite să se execute în mod repetat un bloc de declarații atâta timp cât o
condiție este adevărată. Ea este o declarație de tip buclă. O declarație while poate avea o altă
clauză opțională.

Sintaxa
WHILE condiţie
Bloc de instrucţiuni
Exemplu:

STAR
T

X = 23

x = 23
raspuns = True
Raspuns = adevarat

while raspuns:
DA y = int(input(Introduceti un numar: '))
if y == x:
Raspuns = print(‘Ai ghicit')
adevarat raspuns = False
elif y < x:
NU Citeste Y
print('Nu, numarul trebuie sa fie mai
mare')
NU DA else:
STOP
print('Nu, numarul trebuie sa fie mai
Y= mic')
X
else:
DA
Afiseaza “Ai ghicit” print(‘Sfarsit încercare')
Y<
X

Afiseaza “Y > X” Afiseaza “Y < X”


Raspuns = fals

Afiseaza “Sfarsit încercare”

11
Instrucţiunea For

Sintaxa

for conditie:
bloc instrucţiuni
else:
bloc instrucţiuni

Exemplu
for i in range(1, 5):
print(i)
else:
print('i este in afara intervalului')

Funcţia range() returnează o secvenţă de numere


Clauza else se execută când se termină for

Instrucţiunea BREAK

Instrucțiunea break este folosită pentru a ieși dintr-o buclă, adică sw opreşte executarea unei
instrucțiuni while sau for, chiar dacă condiția de buclă nu a devenit Falsă sau secvența de elemente
nu a fost complet repetată.

i=1
while i<6:
print(i)
if i == 3:
break
i += 1

Instrucţiunea CONTINUE

Instrucțiunea continue este folosită pentru a ignora restul instrucțiunilor din blocul actual de buclă
și a continua la iterația următoare a buclă.

i=0
while i<6:
i += 1
if i == 3:
continue
print(i)

12
Lucrul cu fişiere

Tipuri de fișiere:
 Text - conține date care au fost codificate în text folosind scheme ca ASCII sau Unicode.
Chiar dacă fișierele conțin numere, ele sunt stocate ca o serie de caractere. Drept rezultat,
fișierul poate fi deschis și văzut într-un editor de text precum Notepad sau Word
 Binare - conțin date care sunt convertite în text

Metode de acces:
 Secvenţial – înregistrările se parcurg secvenţial.
 Direct – înregistrările pot fi accesate direct

Un fișier obiect (file object) este un obiect asociat cu un fișier specific și oferă o cale
programului de a lucra cu acel fișier. În program, o variabilă referă obiectul fișier. Acea variabilă
se îngrijește de toate operațiile făcute în fișier.

Modul de lucru:

 deschidere fişier în modul dorit


 efectuare operaţii pe conţinutul acestuia
 închidere fişier.

Deschiderea unui fişier


se face folosind funcţia open. Sintaxa este:

identificator_fişier = open(‘nume_fişier’ [,‘mod_deschidere’] [, buffer])

unde

 identificator _fişier - numele variabilei care referă obiectul fișier


 nume_fişier - conţine calea către fişierul care va fi deschis (dacă este doar numele
fişierului, atunci Python va căuta fişierul în calea în care se află scriptul),
 mod_deschidere - este unul dintre modurile din tabelul de mai jos, scris ca string
(modul implicit este "citire", r), Un fişier poate fi deschis în mai multe moduri:

Implicit
Deschide fişierul pentru citire (read).
r
Fişierul va fi suprascris.
Fişierul trebuie să existe.
Deschide fişierul pentru citire în format binar.
rb Fişierul va fi suprascris.
Fişierul trebuie să existe.
r+ Deschide fişierul şi pentru scriere şi pentru citire (read/write)
Fişierul va fi suprascris.
Fişierul trebuie să existe.
Deschide fişierul şi pentru scriere şi pentru citire (read/write) în format binar
rb+ Fişierul va fi suprascris.
Fişierul trebuie să existe.
Deschide fişierul pentru scriere (write).
w Fişierul va fi suprascris.
Dacă fişierul nu există, îl va crea.
Deschide fişierul pentru scriere în format binar.
wb Fişierul va fi suprascris.
Dacă fişierul nu există, va fi creat.
Deschide fişierul pentru scriere şi citire (read/write) în format normal
w+ Fişierul va fi suprascris.
Dacă fişierul nu exisă, va fi creat.
Deschide fişierul pentru scriere şi citire (read/write) în format binar.
wb+ Fişierul va fi suprascris.
Dacă fişierul nu exisă, va fi creat.
Deschide fişierul pentru scriere (write) cu append la finalul acestuia.
a
Dacă fişierul nu există, îl va crea.
Deschide fişierul pentru scriere în format binar cu append la finalul acestuia.
ab
Dacă fişierul nu există, va fi creat.
Deschide fişierul pentru scriere şi citire (read/write) în format normal, cu append
a+ la finalul acestuia.
Dacă fişierul nu exisă, va fi creat.
Deschide fişierul pentru scriere şi citire (read/write) în format binar cu append la
ab+ finalul acestuia.
Dacă fişierul nu exisă, va fi creat.
x (Create) - creează fişierul, apare eroare dacă fişierul există.

 buffer indică dimensiunea bufferului.

Obs: dacă bufferul are o valoare diferită de 0 sau 1, atunci textul pe care vrem să îl scriem în
fişier, va fi mai întâi adăugat în acest buffer, iar abia atunci când dimensiunea textului depăşeşte
pe cea a bufferului, textul aflat în buffer va fi adăugat în fişier.

Exemplu:

Fișierul client.txt conține datele unui client și vrem să îl deschidem pentru a îl citi:

fisier_client = open(‘client.txt’, ‘r’)

După ce declarația este executată, fișierul client.txt este deschis și variabila fisier_client va referi
un fișier obiect pe care îl putem folosi ca să citim date din fișier.
Închiderea unui fişier
Metoda close() - închide fisierul și eliberează memoria.

Pentru a ne asigura că orice fişier va fi închis după ce a fost utilizat se poate folosi managerul de
context (context manager) with care se asigură că fişierul va fi închis odată ce s-a terminat
executarea blocului de cod inclus în acesta.

Sintaxa:

with open(‘nume_fişier’,’mod_deschidere’ as identificator_fişier

De exemplu

Programul: Poate fi scris:

# Scriere în fişier # Scriere în fişier

f = open('test.txt', 'w') with open('test.txt', 'w') as f:


f.write('text de test') f.write('text de test')
f.close()
# Citire din fişier # Citire din fişier

f = open('test.txt', 'r') with open('test.txt', 'r') as f:


print(f.read()) print(f.read())
f.close()

Cuvântul cheie with ne indică prezenţa unui manager de context, urmând apoi o funcţie care
returnază un manager de context şi atribuim acest rezultat unei variabile (în cazul nostru f) prin
cuvântul cheie as.

Variabila aceasta va fi o variabilă locală, ceea ce înseamnă că nu va mai fi disponibilă după


încheierea blocului with.

Este recomandată folosirea acestei metode de a lucra cu fişiere în Python. Motivele sunt că pe de
o parte, codul arată mult mai bine şi este mai uşor de întreţinut, iar pe de cealaltă parte, elimină
posibilitatea de a uita un fişier deschis.

Scrierea într-un fişier


Metoda write() – scrie în fișier

Identificator_fişier.write(string[/n])

unde:
 Identificator_fişier - numele variabilei care referă obiectul fișier
 string – un şir care va fi scris în fişier
 /n face ca şirul să fie scris într-o linie nouă

Daca şirul este de tip numeric sau listă se face mai întâi conversia la tipul string și apoi se scrie
în fișier.

Dacă şirul e de tip obiect (instanță a clasei X), atunci clasa respectivă trebuie să implementeze
metoda __str__ (__repr__)

Fişierul trebuie deschis în prealabil pentru scris (‘w’ sau ‘a’) altfel apare eroare.

Exemplu 1:

fisier_client = open(‘client.txt’, ‘w’)


fisier_client.write(‘Metro/n’)
fisier_client.write(‘Brico/n’)
fisier_client.write(‘Dedeman/n’)
fisier_client.close()

sau

client=‘Metro’
fisier_client.write(‘client’)
fisier_client.close()

Exemplu 2:

#Acest program ia trei nume de la user şi le scrie intr-un fisier


print('Introduceti numele a trei client:')
nume1 = input('Clientul 1 ')
nume2 = input('Clientul 2 ')
nume3 = input('Clientul 3 ')
#deschide un fisier numit clienti.txt
fisier = open('clienti.txt', 'w')
#Scrie numele in fisier
fisier.write(nume1 + '\n')
fisier.write(nume2 + '\n')
fisier.write(nume3 + '\n')
#inchide fisierul
fisier.close()
print('Numele au fost scrise in clienti.txt')
Șirurile pot fi scrise direct cu metoda write, în schimb numerele trebuiesc convertite în șiruri
înainte de a fi scrise, pentru aceasta putându-se folosi funcţia str().

Exemplu:

#Acest program ia trei numere de la utilizator


#si le scrie intr-un fisier
print('Introduceti numerele:')
nr1 = int(input('Numarul 1: '))
nr2 = input('Numarul 2: '))
nr3 = input('Numarul 3: '))
#deschide un fisier numit numere.txt
fisier = open('numere.txt', 'w')
#Scrie numele in fisier
fisier.write(str(nr1) + '\n')
fisier.write(str(nr2) + '\n')
fisier.write(str(nr3) + '\n')
#inchide fisierul
fisier.close()
print('Numerele au fost scrise in numere.txt')

Expresia str(nr1) + ‘\n’ convertește valoarea referită de variabila nr1 într-un șir și o concatenează
cu ‘\n’ șirului.

Citirea conţinutului unui fişier


Metoda read() - citirea tuturor liniilor dintr-un fișier si returnarea unui singur string (care
conţine informaţiile din toate liniile). Poate fi specificat numărul de caractere citite (de exemplu
read(100)).

Metoda readline() - citirea unei linii din fișier și returnarea ei sub formă de string

Exemplu :

fisier_client = open(‘client.txt’, ‘r’)


continut_fisier= fisier_client.read()
fisier_client.close()
print(continut_fisier)

este echivalent cu:

print(open(“client.txt’).read())
Copierea conţinutului unui fişier
fisier=open(‘date.txt’. ’r’)
linii=fisier.read()
fisier.close()
copie=open(‘copiedate.txt’, ‘w’)
copie.write(linii)
copie.close()

Fişiere CSV
Un fișier CSV (fișier cu valori separate prin virgulă) este un tip de fișier text simplu care
utilizează structurarea specifică pentru a aranja datele tabulare. Deoarece este un fișier text
simplu, acesta poate conține numai date de text reale - cu alte cuvinte, caractere tipărite ASCII
sau Unicode.

Structura unui fișier CSV este dată de numele său. În mod normal, fișierele CSV utilizează o
virgulă pentru a separa fiecare valoare specifică a datelor.

În general, caracterul separator se numește delimitator, iar virgula nu este singura folosită. Alte
delimitatoare populare includ caracterele tab (\ t), colon (:) și semi-colon (;). Executarea corectă
a unui fișier CSV ne cere să știm ce delimitator este utilizat.

Citirea dintr-un fișier CSV se face utilizând obiectul reader prin intermediul bibliotecii CSV
care se deschide prin instrucţiunea import csv.

Fișierul CSV este deschis ca fișier text cu funcția open(), care returnează un obiect de fișier.
Acesta este apoi transmis către reader.

Fişierul csv angajati.txt conţine:

nume,departament, luna
Popescu Ion,Contabilitate,Noiembrie
Ipnescu Virgil,IT,Martie

Programul:

import csv
with open(angajati.txt') as csv_file:
csv_reader = csv.reader(csv_file, delimiter=',')
line_count = 0
for row in csv_reader:
if line_count == 0:
print(f'Numele coloanelor sunt{", ".join(row)}')
line_count += 1
else:
print(f'\t{row[0]} lucrează în departamentul {row[1]}, s-a nascut în {row[2]}.')
line_count += 1
print(f'Procesate {line_count} linii.')

Rezultatul va fi:

Numele coloanelor sunt, departament, luna


Popescu Ion lucrează în departmentul Contabilitare, si s-a nascut în Noiembrie.
Ionescu Virgil Ion lucrează în departmentul IT, si s-a nascut în Martie.
Procesate 3 linii.

Fiecare rând returnat de reader este o listă a elementelor String care conțin datele găsite prin
eliminarea delimitatorilor. Primul rând returnat conține numele coloanelor, care sunt tratate într-
un mod special.

Bibliografie

http://mirceaprodan.com/wp-content/uploads/2014/10/Cum-sa-programezi-in-PythonMP.pdf
IV.2. SAS Enterprise Guide - Descriere generală
SAS Enterprise Guide este o aplicaţie client pentru Microsoft Windows uşor de utilizat, pentru
accesarea şi analiza datelor utilizând modulele SAS care oferă utilizatorului următoarele
facilităţi:
 interfaţă vizuală intuitivă şi personalizabilă;
 acces la cele mai multe dintre modulele SAS;
 acces transparent la date;
 proceduri predefinite pentru analiză şi raportare;
 exportul facil al datelor şi al rezultatelor în alte aplicaţii;
 editor de programe cu facilităţi de completare de sintaxă şi de construire automată a help-
ului funcţiilor;
 facilităţi de scripting şi automatizare.

Trebuie menţionat faptul că SAS Enterprise Guide nu este o alternativă a SAS, ci poate fi
considerat o extensie a acestuia care permite un mod alternativ de lucru şi care nu poate
funcţiona în absenţa unui motor SAS.
Utilizatorii având diverse niveluri de experienţă (de la începători până la experţi) pot utiliza SAS
Enterprise Guide pentru a obţine rapid rezultate semnificative.
Interfaţa de ultimă generaţie a SAS Enterprise Guide oferă: funcţionalitate de tip drag-and-drop;
ferestre de dialog pentru introducerea parametrilor prelucrărilor şi efectuarea de setări prin
instrumente de tip wizard; editor de sintaxă pentru scrierea programelor, cu evidenţierea în culori
diferite a elementelor codului; facilităţi de Help Online, help senzitiv la context şi tutorial de
iniţiere.
Utilizând SAS Enterprise Guide, se pot accesa modulele SAS fără să fie nevoie să se înveţe
limbajul de programare în SAS. Dacă utilizatorul este programator SAS, el poate utiliza editorul
de cod al pachetului de programe pentru a crea cod nou sau pentru a modifica programe SAS
existente (figura IV.2.1.).

Figura IV.2.1. Exemplu de cod SAS


Utilizatorul poate modifica codul SAS generat de pachet (din fereastra Code) pentru a
personaliza rezultatele şi pentru a accesa facilităţile SAS care nu sunt disponibile în cadrul
interfeţei grafice. De asemenea, utilizatorul poate salva codul şi apoi să îl execute într-un mediu
de tip batch (un fişier de tip batch reuneşte într-un singur fişier un set de comenzi care altfel ar fi
fost prezentate în mod interactiv, pe rând, sistemului de operare, folosind tastatura sau mouse-ul.
Un astfel de fişier este, de obicei, creat pentru a încapsula o secvenţă de comenzi pe care
utilizatorul o execută în mod repetat).
Pentru a lucra cu SAS Enterprise Guide, trebuie parcurşi următorii paşi: crearea unui proiect
nou, adăugarea de date la proiect, executarea de prelucrări asupra datelor, personalizarea
rezultatelor şi automatizarea procesului.
Pe măsură ce se accesează date şi se realizează prelucrări, SAS Enterprise Guide generează cod
SAS. Atunci când se rulează o prelucrare, codul generat este trimis motorului SAS pentru
procesare, iar rezultatele, precum în figura IV.2.2 sunt retransmise către SAS Enterprise Guide
(EG). Pachetul software se poate conecta la motorul SAS pe calculatorul local sau pe un alt
calculator numit server SAS.

SAS
SAS pe Windows
pe Windows

SAS
SAS pe
Mainframe
pe Mainframe
Cod Rezultate

SAS
pe UNIX
SAS
SAS Enterprise
pe UNIX
Guide
SAS Enterprise Guide

Figura IV.2.2. Procesarea datelor între SAS EG şi motorul SAS

Când informaţiile despre obiecte sunt stocate, SAS Enterprise Guide se conectează, de asemenea,
la un depozit de metadate SAS. În figura IV.2.3. SAS Enterprise Guide este conectat la un server
SAS la distanţă şi la un depozit de metadate SAS.
Figura IV.2.3. Conectarea SAS Enterprise Guide la un server SAS la distanţă şi la un
depozit de metadate SAS

La lansarea în execuţie a produsului SAS Enterprise Guide, ferestrele sunt aranjate în mod
implicit ca în figura IV.2.4.

Arborele
proiectului Fereastra
principala/spaţiul de lucru
unde se vizualizează
fluxul de proces

Fereastra
de resurse

Prelucrări în execuţie

Figura IV.2.4. Interfaţa implicită SAS Enterprise Guide

Interfaţa implicită constă din patru ferestre principale şi anume: fereastra arborelui proiectului
(Project Tree), fereastra principală sau spaţiul de lucru unde se vizualizează fluxul de proces
(Process Flow), fereastra prelucrărilor (Task Status) şi fereastra resurselor (formată din mai
multe ferestre).
Dacă utilizatorul îşi personalizează interfaţa, prin închiderea, deschiderea sau schimbarea poziţiei
ferestrelor, modificările sunt salvate la ieşirea din SAS Enterprise Guide. Dacă se doreşte să se
restaureze modul de vizualizare implicit, din meniul principal se vor selecta opţiunile Tools
Options General şi de acolo Restore Window Layout. Dacă una dintre ferestre a fost
închisă şi se doreşte restaurarea ei, din meniul View se va selecta numele ei.
Fereastra de resurse (Resources pane) şi spaţiul de lucru (Process Flow) constituie
elemente ale interfeţei în care sunt rezidente mai multe ferestre. Implicit, se poate vizualiza o
sigură fereastră în aceste zone (opţiunea Show One), dar este posibilă divizarea lor pentru a
permite vizualizări multiple prin selectarea butonului săgeată în jos, opţiunea Show Multiple şi
selectarea ferestrelor dorite. Pentru vizualizarea secvenţială a ferestrelor din fereastra aferentă
resurselor se apasă pictogramele corespunzătoare, respectiv Tasks, SAS Folders, Server
List, Prompt Manager sau Data Exploration History. Totodată, în interiorul spaţiului de
lucru, sunt aplicate mare parte din funcţiile SAS Enterprise Guide aflate la dispoziţia
utilizatorului. De aceea, înainte de a diviza acest spaţiu, este utilă o maximizare a sa, folosind
opţiunea ViewMaximize Workspace din bara de meniu. Odată cu această maximizare,
ferestra arborelui proiectului şi zona resurselor sunt minimizate şi fixate pe marginea din stânga a
interfeţei. Se revine la starea iniţială tot prin opţiunea ViewMaximize Workspace.
În SAS Enterprise Guide, toată activitatea desfăşurată este salvată în proiecte. Un proiect este o
colecţie de date aferente, sarcini, programe şi rezultate.
Ferestra Project Tree afişează o structură ierarhică a proiectului activ. Atunci când se crează un
nou proiect, ferestra Project Tree este goală. Pe măsură ce se adaugă date, se execută prelucrări sau
se generează rezultate, în ferestră vor fi adăugate pictograme pentru fiecare dintre aceste obiecte.
Ele sunt văzute ca obiecte ale unui proiect. Se poate reveni la o prelucrare a datelor în arborele
proiectului, modifica şi rula din nou pentru a obţine un set nou de rezultate ce pot fi salvate separat
sau pot fi suprascrise peste rezultatele prelucrării anterioare.
Pentru deschiderea unui nou proiect, dacă SAS Enterprise Guide nu este deja deschis, se
lansează în execuţie şi din fereastra principală se selectează opţiunea New Project, în caz
contrar, se vor selecta opţiunile File New Project. În acest moment noul proiect va fi
deschis, având ferestrele Project Tree şi Process Flow goale.
Un proiect şi conţinutul acestuia poate fi salvat în orice locaţie, inclusiv într-un alt server, ca un
singur fişier. În acest scop se vor parcurge următorii paşi:
1. Se selectează opţiunile File Save Project As;
2. La deschiderea ferestrei Save se va stabili şi selecta dacă proiectul va fi salvat în
calculatorul local sau pe server, după care se selectează opţiunea My Computer;
3. În fereastra Save se selectează locaţia pentru proiect, în câmpul File name se introduce numele
proiectului (care se va salva cu extensia .egp).
4. Se efectuează clik pe butonul Save.
Fereastra fluxului de proces (Process Flow) este formată din mai multe ferestre, putând
fi deschisă fie selectând-o din meniul View, făcând dublu clic pe numele său în ferestra arborelui
proiectului (Project Tree), selectând din lista care apare deasupra spaţiului de lucru, din lista de
pe bara de meniu sau apăsând tasta F4. Ferestra fluxului de proces este formată din ferestre ce
conţin datele, rezultatele, programele SAS (codul), informaţii privind execuţia (engl. logs) sau
note, existând un tip special de pictogramă pentru fiecare tip de document. Spre exemplu, în
figura IV.2.5. fluxul de proces conţine date, rezultate, prelucări şi programe SAS.

Figura IV.2.5. Interfaţa implicită SAS Enterprise Guide

Exemple de pictograme utilizate de SAS Enterprise Guide sunt prezentate în tabelul IV.1.
Tabelul III.1. Exemple de pictograme din arborele proiectului
Datele dintr-un proiect pot fi tabele de date SAS, fişiere flat care conţin date sau alte
fişiere de date ale unor Sisteme de Gestiune a Bazelor de Date sau aplicaţii.
Proiectele conţin referinţe la date şi nu datele propriu-zise. Pictograma reprezintă un
set de date SAS.
Prelucrările reprezintă analize sau rapoarte specifice care pot fi executate, cum ar fi
rapoarte listă (List Data) sau grafice cu bare verticale (Bar Chart). Atunci când se
rulează o prelucrare, SAS Enterprise Guide adaugă o pictogramă reprezentând
prelucrarea respectivă în feresatra fluxului de proces şi a arborelui proiectului.
Pictograma reprezintă o prelucrare de tip grafic cu bare verticale.
Rezultatele sunt rapoarte sau grafice produse în urma execuţiei prelucrărilor.
Rezultatele sunt reprezentate prin pictograme diferite în funcţie de tipul fişierului
rezultat (raport SAS, HTML, PDF, RTF sau text). Pictograma reprezintă un rezultat în
formatul raport SAS.
Notele sunt fişiere text opţionale folosite pentru documentarea unui proiect sau
pentru a consemna comentarii sau instrucţiuni pentru utilizările ulterioare.
Programele sunt fişiere care conţin cod SAS.

Arborele proiectului (Project Tree) afişează o vizualizare ierarhică a proiectului activ şi date
asociate, programe, note şi rezultate (a se vedea figura IV.2.4). Fereastra Project Tree poate fi
folosită pentru a gestiona obiectele din proiect. Într-un proiect se pot crea noi fluxuri de proces şi se
pot muta sau copia obiecte între fluxurile de proces. De asemenea, se poate executa doar o porţiune
a unui flux de proces, sau întregul flux, imediat sau poate fi programat pentru o execuţie ulterioară.
Fereastra Task Status este o parte a interfeţei SAS Enterprise Guide utilizată pentru a afişa date,
cod, informaţii privind execuţia (log-uri), rezultatele activităţilor şi a fluxurilor de proces.
Înainte de rulare, fereastra aferentă fluxului de proces este singura fereastră deschisă în zona de lucru.
Când se generează rapoarte sau se deschid fişiere de date, în spaţiul de lucru de deschid mai multe
ferestre, ce pot fi accesate cu uşurinţă.
În SAS Enterprise Guide, task-urile sunt utilizate pentru realizarea oricărei activităţi, de la
manipularea datelor, la derularea procedurilor analitice specifice sau la crearea de rapoarte. Multe
task-uri sunt, de asemenea disponibile ca wizard-uri, care conţin un număr limitat de opţiuni şi care
pot oferi o modalitate rapidă şi uşoară de a utiliza o parte dintre aceste task-uri. Task-urile şi wizard-
urile pot fi alese utilizând lista de activităţi (Tasks) sau prin utilizarea meniului principal.
În mod implicit Tasks este ascunsă, dar ea poate fi vizualizată apăsând butonul Tasks din
fereastra de resurse aflat în colţul din stânga jos al spaţiului de lucru. Tasks permite mai multe
moduri de vizualizare (figura IV.2.6) vizualizează task-rile în ordine alfabetică, recente, favorite,
filtrate etc.

Figura IV.2.6. Fereastra Tasks din fereastra de resurse

Fereastra de stare a activităţulor (Task Status) afişează mesaje despre starea task-urilor aşa
cum acestea sunt prelucrate (figura IV.2.6). Fereastră Task Status nu este afişată în mod
implicit, dar ea poate fi vizualizată prin selectarea opţiunilor View Task Status. Fereastra
Process Flow afişează, de asemenea, o culoare de fundal diferită în jurul task-ului activ, pentru
fiecare fază de prelucrare.
Figura IV.2.6. Fereastra Task Status

IV.3. Accesarea datelor


Înainte de a realiza prelucrarea şi analiza datelor în SAS Enterprise Guide, este necesar ca datele
să fie adăugate (importate) în proiect. Utilizatorul are posibilitatea să deschidă date care se află
pe calculatorul local sau pe orice alt server pe care este autorizat să îl acceseze. Pe lângă fişierele
de date SAS (date locale sau la distanţă), SAS Enterprise Guide poate citi majoritatea tipurilor de
fişiere de date ca HTML (date locale), tabele Microsoft Access, foi de calcul Microsoft Excel şi
foi de calcul Lotus (date locale), baze de date dBASE2, Oracle şi Sybase (locale sau la distanţă,
cu precizarea că este necesară o licenţă pentru motorul SAS database), cuburi OLAP (locale sau
la distanţă şi cu conectare la un server OLAP) şi altele (figura IV.3.1).

Figura IV.3.1. Formate de date suportate de SAS Enterprise Guide

În esenţă, formatele de fişiere suportate de SAS Enterprise Guide pot fi clasificate în trei
categorii:
1. Tabele de date SAS, care sunt formate specifice ale pachetului de programe SAS. Pentru a
putea fi supuse prelucrărilor, toate celelalte tipuri de formate suportate de pachetul SAS
trebuie tranformate în tabele de date SAS.
2. Fişiere flat conţin înregistrări între care nu există nici o inter-relaţionare. Avantajul este acela
că ocupă mai puţin spaţiu decât fişierele structurate. Totuşi, necesită ca aplicaţia care le
foloseşte să cunoască modul în care datele sunt organizate în fişier. Exemple de fişiere flat
sunt fişiere text, fişiere ASCII sau fişiere secvenţiale.
3. Fişiere ale altor aplicaţii software cum ar fi Microsoft Access sau Paradox. Nu este nevoie
să se instaleze software adiţional pentru a citi date în următoarele formate: dBASE, HTML,
IBM Lotus 1-2-3, Microsoft Access, Microsoft Excel, Microsoft Exchange, Paradox.
Totuşi, pentru fişiere de dimensiuni mari, se pot îmbunătăţi performanţele aplicaţiei prin
utilizarea software-ului SAS/ACCESS. În acest sens, în funcţie de tipul de fişier care va fi citit,
interfeţete SAS/ACCESS to PC Files sau SAS/ACCESS to ODBC trebuie instalate pe acelaşi
calculator pe care este instalat şi SAS.
Deşi se pot deschide şi rula task-uri pe diverse tipuri de date, dacă se doreşte editarea acestor
date, ele trebuie deschise ca un set de date SAS. În acest scop SAS Enterprise Guide permite
importul a diverse tipuri de fişiere de date pentru crearea seturilor de date SAS.

IV.3.1 Formate de date suportate de SAS Enterprise Guide


SAS Enterprise Guide poate citi şi utiliza date dintr-o variatate de formate:
 Fişierele text conţin înregistrări între care nu există nici o inter-relaţionare. Avantajul
este acela că ocupă mai puţin spaţiu decât fişierele structurate. Totuşi, necesită ca
aplicaţia care le foloseşte să cunoască modul în care datele sunt organizate în fişier.
Fişiere text cu laţime fixă - Un fişier text cu lăţime fixă are un format specific care permite
salvarea datelor/informaţiilor textuale într-o manieră organizată. Este un tip special de fişier
în care formatul este definit de lăţimea coloanei, de caracterele folosite pentru spaţiere şi de
alinierea la stânga sau dreapta. Lăţimea coloanei este specificată sub forma unui număr de
caractere. Spaţierea datelor se face folosind caracterul spaţiu (sau orice caracter se doreşte) în
cazul în care datele ocupă mai puţine caractele decât lăţimea specificată pentru coloana
respectivă.
Mai jos este prezentat un exemplu de fişier text în care lăţimea primei coloane este de 25
de caractere, celei de-a doua de 10 caractere şi cea de-a treia de 12 caractere.
Nume Judeţ Telefon
Popescu Maria VL 0250277189
Ionescu Damian DJ 0251767868
Diamandescu Victor DB 0245876590

Într-un fişier text delimitat fiecare linie de text reprezintă o înregistrare, iar câmpurile sunt
separate prin caractere cunoscute. Delimitatorii frecvent utilizaţi sunt caracterul tab (\t) sau
diferite caractere de punctuaţie. Delimitatorul trebuie întotdeuna să fie un caracter care nu
se regăseşte în date. Astfel de fişiere se pot crea facil folosind aplicaţii de calcul tabelar sau
pentru baze de date (ex. Microsoft Excel, Microsoft Access, în Excel: File  Save AS,
Text (Tab delimited)). Un astfel de fişier poate conţine numele, prenumele şi vârsta
persoanelor, delimitate prin simbolul linie verticală (|):
Popescu|Maria|35
Ionescu|Damian|42
Diamandescu|Victor|29
 Date compatibile cu standardul ODBC şi OLE DB. ODBC (Open DataBase Connectivity)
este o metodă standard de accesare a bazelor de date care permite accesul la orice date din
cadrul oricărei aplicaţii, indiferent de sistemul de gestiune a bazelor de date care gestionează
datele. ODBC realizează acest lucru prin inserarea unui strat de mijloc (middle layer), numit
driver de baze de date, între aplicaţie şi SGBD. Scopul acestui strat este de a transforma
interogările aplicaţiei în comenzi pe care un SGBD le înţelege. În acest sens, atât aplicaţia,
cât şi SGBD-ul trebuie să fie compatibile cu standardul ODBC, adică aplicaţia trebuie să fie
capabilă să genereze comenzi ODBC, iar SGBD-ul trebuie să fie capabil să răspundă la
acestea. OLE DB (Object Linking and Embedding, Database) este o interaţă API proiectată
de Microsoft pentru accesarea diferitelor tipuri de date stocate într-o manieră uniformă. OLE
DB include şi capabilităţile ODBC.
 Datele în format SAS (sau tabele SAS), Foi de calcul Microsoft Excel, Fişiere dBase,
Tabele HTML, Tabele Microsoft Access. Pentru a putea fi accesate de SAS EG, datele
trebuie să fie reprezentate în format tabelar (ca o mulţime de linii şi coloane). O linie (rând)
reprezintă o instanţă a unei entităţi. Entitatea poate fi un produs, un client, o comandă sau
orice alt lucru. Fiecare coloană (variabilă) descrie caracteristicile entităţii, cum ar fi codul de
identificare al unui produs, numele clientului sau cantitatea vândută (figura IV.3.2.)

Figura IV.3.2. Exemplu de tabelă

Toate coloanele trebuie să aibă un nume, un tip şi o lungime. Numele pot avea o lungime de la 1 la
32 de caractere, iar eticheta ataşată unei coloane poate avea lungimea de maxim 265 de caractere.
Unul dintre cele mai importante lucruri care trebuie ştiute despre date este ce tip de date conţine
fiecare coloană (sau variabilă). SAS priveşte datele ca fiind fie de tip caracter, fie de tip numeric.
În cazul în care datele dintr-o coloană conţin doar litere, aceasta are date de tip caracter. Valorile
de tip caracter pot avea lungimea între 1 si 32,767 caractere (octeţi). În cazul în care datele dintr-
o coloană conţin numere, aceasta poate fi de tip caracter sau numeric.
Datele numerice sunt grupate în patru categorii de date, în funcţie de modul în care acestea sunt
afişate. Figura IV.3.3 arată ce simbol este asociat fiecărui tip de dată precum şi pictogramele
asociate lor. Pictogramele apar în titlurile de coloană ale tabelei de date şi de asemenea, se pot
vedea atunci când se rulează o prelucrare. Aceste simboluri constituie un indiciu despre modul în
care pot fi folosite coloanele sau varibilele în prelucrări.

Figura IV.3.3. Tipuri de date şi pictogramele lor

IV.3.2. Formate de introducere şi afişare a datelor

Formatele de intrare (Informat) sunt, de obicei, folosite pentru a citi într-o variabilă date din
surse externe numite fişiere flat (fişiere text, fişiere ASCII sau fişiere secvenţiale).
Formatele de intrare instruiesc aplicaţiile SAS asupra modului în care trebuie să citească datele
într-o variabilă SAS. Sunt, de obicei, grupate în trei categorii: caracter, numeric şi dată/timp
(figura IV.3.4).

Figura IV.3.4. Formate de intrare


Formatele de intrare au următoarea sintaxă:
- Formate de intrare caracter: $INFORMATw.
- Formate de intrare numerice: INFORMATw.d
- Formate de intare dată/timp: INFORMATw.
Semnificaţia simbolurilor folosite de formatele de intrare este următoarea:
$ indică prezenţa unui caracter
w semnifică lăţimea unei variabile (în octeţi sau număr de coloane)
INFORMAT este un nume opţional de format de intrare SAS
d este folosit în cazul datelor numerice pentru a specifica numărul de cifre ale
părţii zecimale.

Toate formatele de intare trebuie să conţină punctul zecimal (.), astfel încât să se poată face
diferenţa între un format de intrare şi o variabilă SAS.
Formatul de afişare (Format) este folosit pentru a controla modul în care sunt afişate valorile. Un
format de afişare (Format) este o „instrucţiune” care se aplică unei coloane, indicând produsului
SAS Enterprise Guide cum să afişeze valorile datelor (figura IV.3.5). Trebuie reţinut faptul că
formatul de afişare nu afectează modul de stocare a valorilor.

Figura IV.3.5. Formate de afişare

IV.3.3. Valori lipsă


Dacă într-o coloană, valoarea unei date nu există pentru un anumit rând, ea este considerată lipsă.
O valoare lipsă de tip caracter este afişată ca spaţiu. O valoare lipsă de tip numeric este afişată ca
virgulă sau punct (figura IV.3.6).

Figura IV.3.6. Reprezentare valori lipsă


În SAS Enterprise Guide sunt multe funcţii care furnizează opţiuni pentru modul de manipulare a
valorilor lipsă, în scopul raportării sau analizei.

IV.3.4. Metadate

Multe formate de fişiere care memorează date sub formă tabelară includ metadate ca parte a
tabelei (figura IV.3.7.). Metadatele reprezintă informaţii despre datele în sine, cum ar fi
originea/sursa datelor, dimensiunea sau formatul lor. Tabelele SAS, Microsoft Access sau
dBASE sunt exemple de fişiere care conţin metadate stocate în interiorul lor.
Fişierul conţine
metadate.

Fişierul nu conţine
metadate.

Figura IV.3.7. Exemple de fişiere cu şi fără metadate

Atunci când accesează un astfel de fişier, SAS EG poate accesa metadatele pentru a determina
numele unei coloane, tipul (caracter sau numeric) şi lungimea (dimensiunea). Există şi cîteva
formate de fişiere, cum ar fi foile de calcul Microsoft Excel, tabelele HTML sau fişierele text
care nu conţin metadate. Pentru aceste tipuri de fişiere, SAS EG trebuie să facă anumite deducţii
referitoare la atributele fiecărei coloane. Implicit, SAS EG caută numele coloanei în primul rând al
fişierului şi analizează valorile stocate în câmpuri sau celule pentru a stabili dacă o anumită
coloană trebuie memorată ca şir de caractere sau ca număr. Dacă se stabileşte că o coloană este de
tip caracter, atunci lungimea ei este setată în mod automat ca fiind 255 (octeţi), care este numărul
maxim de caractere permis de motorul de baze de date Microsoft Jet.

IV.3.5. Date locale şi date la distanţă

Când utilizatorul deschide date în SAS Enterprise Guide, el trebuie să selecteze dacă doreşte să
le preia din computerul local, dintr-un server SAS, sau dintr-un folder SAS (figura IV.3.8).
Figura IV.3.8. Surse de date în SAS Enterprise Guide

Dacă utilizatorul efectuează clic pe opţiunea My Computer, el poate parcurge structura de


directoare a calculatorului local şi poate să deschidă orice tip de fişier de date pe care SAS
Enterprise Guide îl poate citi.
Dacă se selectează opţiunea Servers, utilizatorul va putea să caute datele pe un server. Acest
server poate să fie un server local, dacă pe calculatorul local este instalat software-ul SAS, sau
poate fi un server la distanţă dacă software-ul SAS este instalat pe un alt calculator. Serverele pe
care le poate vedea utilizatorul depind de mediul la care acesta este conectat.
În cadrul fiecărui server există pictograme care pot fi selectate, pentru biblioteci (Libraries) şi
fişiere (Files) (figura IV.3.9). Unele biblioteci sunt definite de SAS, iar altele de SAS Enterprise
Guide. Bibliotecile conţin numai seturi de date SAS. Directorul Files dintr-un server permite
utilizatorului să acceseze fişiere de date dintr-o structură de director aflată pe calculatorul pe care
funcţionează serverul SAS.

Figura IV.3.9. Biblioteci şi fişiere


Deschiderea fişierelor dintr-un server se poate face şi prin dublu clic pe fişier, în fereastra
Server List. Această fereastră este deschisă implicit în fetreastra de resurse, în colţul din stânga
jos a spaţiului de lucru. În cazul în care fereastra Server List este închisă, pentru a o deschide
se selectează opţiunea View Server List.
Dacă utilizatorul selectează SAS Folders, el poate naviga prin lista de directoare SAS la care
are acces. Directoarele SAS sunt definite în SAS Metadata Server şi pot fi utilizate
pentru a furniza o locaţie centrală pentru stocarea proceselor, harţilor de informaţii (information
maps) şi a proiectelor, astfel încât ele să poată fi partajate cu alte aplicaţii SAS. Directoarele SAS
pot stoca, de asemenea şi conţinut care nu se găseşte în SAS Metadata Server, cum ar fi
fişierele de date.

IV.3.6. Adăugarea datelor SAS într-un proiect

Adăugarea datelor SAS din calculatorul local


Pentru adăugarea datelor se va parcurge următoarea secvenţă de paşi: Se selectează opţiunile
File Open Data. În fereastra Open Data se selectează opţiunea My Computer. În câmpul
Look In se selectează opţiunea Data, fişierul dorit şi apoi se efectuează clik pe butonul Open
(figura IV.3.10). În mod implicit, în fereastră vor fi afişate fişierele de toate tipurile. Fişierele cu
pictograma sunt seturi de date în format SAS.

Figura IV.3.10. Fereastra Open

În acest moment, setul de date este adăugat în proiect şi deschis în grila de date. În mod implicit
tabela este deschisă în modul citire (Protect Data din Edit). În acest mod, utilizatorul poate
parcurge datele, redimensiona lăţimea coloanelor, ascunde coloane şi rânduri şi poate copia
coloane şi rânduri într-un nou fişier, dar nu poate edita datele decât dacă va trece în modul editare
(Update Mode). Este de remarcat faptul că atunci când se inserează date într-un proiect se
crează referinţe la date, dar SAS Enterprise Guide nu realizează o nouă copie a fişierului.
Pentru a vizualiza proprietăţile unui set de date, în arborele proiectului se selectează fişierul de
date, clic dreapta şi apoi opţiunea Properties. Se va deschide fereastra Properties, în care se
vor putea vedea informaţii referitoare la propietăţile generale, cum ar fi locaţia fizică a datelor şi
data ultimei lor modificări (figura IV.3.11).
Figura IV.3.11. Fereastra Properties
Dacă, în zona de selecţie se optează pentru opţiunea Columns, se va putea vedea lista
coloanelor setului de date precum şi atributele acestor coloane (figura IV.3.12).

Figura IV.3.12. Vizualizarea atributelor coloanelor setului de date

Adăugarea datelor dintr-o bibliotecă SAS

În cadrul unui proiect, pentru a adăuga date dintr-o bibliotecă SAS, se vor selecta opţiunile File
Open Data. În fereastra Open Data se va selecta opţiunea Servers (figura IV.3.13). Se
poate ca în fereastră să fie afişate mai multe servere. Server-ul la care este conectat SAS
Enterprise Guide este marcat distinct. Se deschide prin dublu-clic. Dacă SAS Enterprise Guide
nu este conectat la un server se va efectua dublu-clic pe server-ul adecvat pentru a-l conecta şi
deschide. După deschiderea server-ului se va selecta opţiunea Libraries, apoi directorul dorit (în
biblioteci sunt stocate numai seturi de date SAS) şi de acolo setul de date dorit, care va fi adăugat
în proiect şi deschis în fereastra principală.
Figura IV.3.13. Adăugarea datelor dintr-o bibliotecă SAS

IV.3.7. Importul datelor dintr-un fişier text.


Facilitatea de import de date (Import Data) permite să se creeze seturi de date SAS din
fişiere text, HTML, Microsoft Excel sau fişiere de baze de date (inclusiv Microsoft Access şi
alte formate populare). Se pot specifica opţiuni pentru a controla modul în care fişierul de
intrare este importat şi modul în care este salvat ca un set de date SAS. În acest scop se:
- Selectează fişierul text şi se specifică setul de date de ieşire – se începe procedura de
import date din meniul File. În plus, dacă se doreşte adăugarea de date care sunt într-
un format pe care SAS Enterprise Guide îl poate importa, task-ul Import Data îl
deschide automat. Implicit, SAS Enterprise Guide selecteaze pentru setul de date şi îl
stochează în prima bibliotecă disponibilă la care are acces. Pentru acest lucru se
selectează opţiunile File Import Data şi se selectează fişierul text care va fi importat.
Odată ce procedura Import Data a fost deschisă, în pagina Specify Data (figura IV.3.14) se
pot observa, în zona Output SAS data set, numele bibliotecii şi al setului de date. În mod
implicit, tabela este salvată în biblioteca Work (totuşi, se poate ca serverul să fie setat astfel
încât, în mod implicit, datele să fie salvate în biblioteca Sasuser). În continuare se va
efectua clic pe butonul Browse, în câmpul File name se va introduce numele dorit pentru
fişierul importat şi se va activa butonul Save. Apoi, se va efectua clic pe butonul Next
pentru a specifica formatul de text şi pentru a vedea modul în care sunt definite
câmpurile.
Figura IV.3.14. Specificarea sursei / destinaţiei datelor

- Selectează formatul textului şi lăţimea câmpurilor – în zona Text format se selectează


opţiunea Fixed columns. Se specifică delimitatorii de coloane prin clic pe riglă la
începutul fiecărei coloane. Pentru a indica sfârşitul primei coloane şi începutul celei de-a
doua se va efectua din nou clic pe riglă bifând poziţia dorită, obţinându-se astfel o linie de
demarcaţie, procedându-se identic pentru celelalte coloane (figura IV.3.15). Se va efectua
clic pe butonul Next pentru a specifica artibutele fiecărui câmp.

Figura IV.3.15. Specificarea lăţimii coloanelor

- Specifică atributele câmpurilor – în tabela care conţine atributele câmpurilor este selectat
implicit câmpul F1. Se va efectua clic pe butonul Modify pentru a deschide fereastra Field
Attributes pentru câmpul F1. În zonele Name, Label şi Type se vor introduce numele,
etichetă şi tipul pentru acest câmp, apoi se va apăsa butonul OK. Pentru selecţia celorlalte
câmpuri se va efectua dublu clic pe numele lor (respectiv F2, F3 etc.), procedându-se similar
(figura IV.3.16). În final se va apăsa butonul Next pentru a vedea opţiunile avansate şi pentru a
executa procesul de import de date.
Figura IV.3.16. Specificarea atributelor coloanelor

Pentru a elimina din procesul de importare preluarea unui anumit câmp se va deselecta bifa din
box-ul de control aferent câmpului respectiv (figura IV.3.17).

Figura IV.3.17. Eliminarea importului unei coloane


- Importă datele – în pagina Advanced Options se pot seta opţiunile respective sau se pot accepta
selecţiile implicite. În fereastra Import Data se va efectua clic pe butonul Finish. Când procesul de
import va fi finalizat, datele importate vor fi afişate în fereastra principală (figura IV.3.18).

Figura IV.3.18. Setul de date importat


IV.4. Pregătirea datelor pentru analiză - interogări
Pregătirea datelor este activitatea cea mai importantă şi mai mare consumatoare de timp în orice
activitate de analiză economică. În cadrul unei organizaţii, apar frecvent noi probleme pentru
rezolvarea cărora este necesară o analiză ad-hoc a datelor, dar de cele mai multe ori, acestea nu
sunt în forma cerută de procesul de analiză.
Activitatea de pregătire a datelor include colectarea datelor corespunzătoare, extragerea
subseturilor de date necesare analizei dorite, precum şi agregarea lor. La nivelul unei unităţi
organizaţionale, datele trebuiesc reunite din diverse surse dispersate. Aceste surse de date pot să
includă date tranzacţionale (de exemplu, privind facturarea şi plata), cifre demografice sau date
financiare. Ulterior, pentru a le aduce în forma cerută de analiză, asupra acestor date trebuie să
fie aplicate diverse transformări.
Sistemele software care procesează date pot fi clasificate în două categorii principale: sisteme
operaţionale şi sisteme pentru depozite de date. Deşi, după cum a fost precizat în capitolul unu,
există şi alte criterii de clasificare ale produselor software, această clasificare este importantă din
perspectiva pregătirii datelor.
Caracteristicile principale ale sistemelor operaţionale sunt următoarele:
 sunt proiectate pentru a oferi suport proceselor operaţionale ale unei organizaţii;
 sunt sisteme care trebuie să fie integrate cu procesele de afaceri şi fluxurile de lucru ale
companiilor sau organizaţiilor care le folosesc;
 sunt specializate în preluarea, stocarea şi prelucrarea datelor privitoare la tranzacţiile zilnice,
de rutină (de accea mai poartă şi numele de sisteme tranzacţionale).
Sistemele pentru depozite de date sunt proiectate pentru a furniza informaţii utilizatorilor, cu
facilităţi pentru raportare, pentru regăsirea informaţiilor sau pentru depozitarea datelor.
Tabelul IV.2 prezentată o comparaţie între cele două categori de sisteme.
Tabelul IV.2. Comparaţie între sistemele operaţionale
şi sistemele pentru depozite de date
Sistemele operaţionale Sistemele pentru depozite de date
Se adresează conducerii departamentelor Constituie o bază pentru procesul decizional de
funcţionale la diferite nivele ale conducerii.
Conţin date curente, primare privind Conţine date istorice. Acestea pot fi
tranzacţiile. Corectitudinea acestor date este disponibile ca atare sau pot fi create pornind de
foarte importantă. la fişierele istorice de log asociate tabelelor.
Au o orientare tranzacţională. Furnizează date pentru raportare, monitorizare
şi analiză.
Este de preferat ca produsul final care rezultă din procesul de pregătire a datelor să fie o
singurătabelă (care va fi folosită pentru analiză) tabelă care va fi numită în continuare tabelă de
analizăsau tabelă analitică. Figura IV.4.1 prezintă susele datelor incluse în tabela analitică.

Tabelă Analitică

Depozit de Date

Sistem Operaţional Alte Date, Date Externe

Figura IV.4.1. Intrări pentru tabela analitică din perspectivă logică

În figura de mai sus se poate observa că există două surse principale pentru datele de analiză:
- Datele tranzacţionale;
- Alte date, cum ar fi date externe, date obţinute din sondaje, date ad-hoc, tabele asociative
(lookup tables), foi de calcul sau fişiere text.
Ambele tipuri de date pot intra direct în tabela analitică sau pot fi regăsite prin intermediul
depozitului de date.

IV.4.1. Interogarea datelor

O interogare (“query”) se poate utiliza dacă se doreşte să se analizeze date care sunt localizate în mai
multe tabele sau doar o parte a datelor dintr-o tabelă.
O interogare poate fi utilizată pentru:
 Selectarea rândurilor pornind de la una sau mai multe condiţii. Rândurile pot fi
selectate pe baza uneia sau mai multor condiţii. În cadrul rezultatului interogării, rândurile
pot fi ordonate pe baza valorilor din una sau mai multe coloane (figura IV.4.2.).

Figura IV.4.2. Ordonarea rândurilor unei interogări


 Selectarea, ordonarea şi sortarea coloanelor. După selectarea sursei sau surselor de date,
utilizatorul poate să aleagă numai acele coloane pe care doreşte să le obţină în rezultate şi
poate să specifice şi ordinea de apariţie a acestora. De asemenea el poate să creeze şi să
calculeze noi coloane precum şi să înlocuiască valori în coloanele existente (figura IV.4.3.).

Figura IV.4.3. Selectarea coloanelor aferente unei interogări


 Definirea de variabile calculate. În cadrul unei interogări pot fi create noi coloane ale căror
valori pot fi calculate pe baza valorilor din coloane deja existente.
 Examinarea relaţiilor dintre valorile datelor.
 Înlocuirea valorilor datelor. Prin intermediul interogării, utilizatorul poate să înlocuiască,
în mod automat, anumite valori dintr-o coloană cu alte valori.
 Joncţiunea (unirea) tabelelor cu scopul de a combina date din diverse surse. Pentru a
obţine date din mai mult de o singură sursă de date, tabelele pot fi reunite, pe baza unor
coloane commune, în diferite moduri (figura IV.4.4.).

Figura IV.4.4. Joncţiunea tabelelor

 Gruparea şi agregarea datelor. Datele pot fi împărţite în grupuri pe baza valorilor dintr-o
coloană. În plus, în oricare dintre coloanele unei interogări pot fi introduse funcţii de agregare
(însumare) – figura IV.4.5.

Figura IV.4.5. Gruparea datelor


 Specificarea unui parametru pentru interogare.
Dacă se doreşte ca rândurile să poată fi selectate în mod dinamic, în timp ce se execută
interogarea, se pot defini interogări care să accepte parametrii şi să permită utilizatorului să
selecteze sau să introducă de la tastatură valorile dorite pentru aceştia. Tehnic vorbind, o
interogare este o cerere de regăsire a datelor din una mai mai multe surse de date. În
contextul SAS, o interogare este o colecţie de specificaţii care ne permit să aducem datele în
forma dorită de utilizator.
În funcţie de necesităţi, utilizatorul poate selecta între mai multe tipuri de ieşiri ale unei
interogări, şi anume: tabela fizică (data table – opţiunea implicită), tabela virtuală (data view)
sau raport (report).
În SAS Enterprise Guide, instrumentul care permite să se construiască specificaţiile unei interogări
poartă denumirea de Query Builder. În Query Builder, interogările se fac pornind de la un
anumit set de date. Implicit, ele se deschid fără a avea selectată nici o coloană a tabelei. Înainte de a
rula o interogare, trebuie să se adauge cel puţin o coloană. Proprietăţile unei coloane pot fi
modificate, incluzând numele (alias-ul), eticheta sau formatul. Prin intermediul a trei tab-uri sunt
oferite diferite funcţionalităţi ale Query Builder: Selecta Data, Filter Data şi Sort Data.
În continuare vor fi prezentate facilităţile oferite de Query Builder. Ecranul principal al Query
Builder este prezentat în figura IV.4.6.

Figura IV.4.6. Ecran principal Query Builder

Query Builder se deschide având afişate, în fereastra de tabele, tabelele selectate în cadrul
interogării, oferindu-i utilizatorului şi posibilitatea de adăuga la acestea noi tabele (prin
intermediul opţiunii Add Tables) de a şterge tabele (cu opţiunea Delete) iar dacă se combină
date din surse diferite, cu ajutorul opţiunii Join se poate specifica tipul de joncţiune care se va
utilize (figura IV.4.7.)

Figura IV.4.7. Opţiunea Join

În mod implicit, în interogare nu este inclusă nici o coloană. Pentru a adăuga coloane, fie se
selectează coloana şi se trage (drag and drop) în tab-ul Select Data, fie se realizează dublu-clic
pe numele coloanei din listă (figura IV.4.8).

Figura IV.4.8. Opţiunea Select Data


Prin intermediul opţiunii Select Data:
 se pot selecta, ordona sau şterge coloane din interogare;
 se pot modifica proprietăţile coloanelor;
 se pot specifica alias-uri pentru coloane;
 se pot grupa datele;
 se pot calcula noi coloane;
 se pot defini parametri;
 se poate valida codul interogării;
 se poate vizualiza codul sau rezultatele interogării, utilizând butoanele din partea dreaptă a
zonei Select Data sau pe cele din partea de sus a ecranului (figura IV.4.9.).

Figura IV.4.9. Butoane Select Data

Într-o interogare se poate insera o nouă coloană care să fie coloană calculată pe baza altor
coloane sau valori. O coloană calculată poate fi folosită pentru a agrega valori, a înlocui valori
pornind de la o anumită condiţie sau a efectua calcule. După crearea unei coloane calculate,
aceasta poate fi folosită pentru sortarea sau gruparea rezultatelor.
Există posibilitatea aplicării unei funcţii de agregare pe oricare dintre coloanele interogrării.
După crearea unei coloane agregate sau a unei coloane calculate care conţine o funcţie de
agregare, pentru ca rezultatele să aibă o semnificaţie, datele pot fi grupate în funcţie de valorile
unei coloane. Această operaţie este echivalentă cu folosirea clauzei GROUP BY într-o
interogare SQL. De exemplu, dacă vrem să calculăm înalţimea medie a unui grup de elevi, vom
grupa rezultatele în funcţie de vârstă, pentru a vedea înălţimea medie pentru fiecare grupă de
vârstă. Implicit, atunci când rulăm o interogare, aceasta este grupată după toate coloanele pe
care trebuie să le afişeze, şi nu va calcula funcţiile de agregare pentru un anumit grup de valori.
Pentru a specifica variabila de grupare dorită se debifează opţiunea Automatically select
groups şi apoi Edit Groups (figura IV.4.10).
Figura IV.4.10. Gruparea rezultatelor după o anumită coloană

Prin intermediul facilităţii de recodificare a unei coloane se permite crearea unei coloane
calculate prin recodificarea unei valori individuale sau a unui domeniu de valori. Acesata mai
poartă şi denumirea de înlocuire a valorilor după anumite criterii. Recodificarea este o modalitate
eficientă de grupare a valorilor. Facilitatea de calculare efectivă a unei coloane permite folosirea
editorului avansat de expresii. Dacă în cadrul opţiunii Select Data se doreşte gruparea datelor, se
pot utiliza facilităţile din zona Summary pentru a realiza subseturi de date grupate pe baza unor
condiţii specificate de utilizator.
Prin intermediul opţiunii Filter Data, utilizatorul poate selecta numai acele rânduri care corespund
unui anumit criteriu bazat pe valorile din anumite coloane (figura IV.4.11). Pentru a realiza acest
lucru, fie se selectează numele coloanei şi se trage în zona filtrului, fie se realizează dublu-clic pe
numele coloanei din listă. Condiţiile de filtrare se definesc în fereastra New Filter.

Figura IV.4.11. Opţiunea Filter Data


Se pot defini două tipuri de filtre: filtre simple şi filtre avansate. Pentru un filtru simplu,
trebuie selectat operatorul de comparaţie şi introduse valorile sau valoarea de comparat. Aceste
valori pot fi preluate şi din valorile câmpului respectiv stocate în tabela SAS corespunzătoare.
Dacă în câmpul Value trebuie să introducem valori nenumerice, atunci acestea trebuie incluse
între ghilimele şi trebuie să se ţină cont de faptul că valorile sunt case-sensitive.
Pentru filtrele avansate, se pot crea expresii complexe prin intermediul unui editor de expresii
avansate. Operatorii de comparaţie disponibili includ operatori standard, dar şi operatori avansaţi
ca cei din tabelul IV.4.1.

Tabel IV.4.1. Operatorii de comparaţie

Operator Exemplu
In a list of values IN ("DB","IL")
Between venit BETWEEN 1200 AND 2000
Is null | Is missing Realizează un test pentru valorile lipsă
nume =* "smith"
Sounds like
găseşte Smythe, Smith etc.
ţara contains "US"
Contains
găseşte "USA", "RUSIA" etc.
Realizează o căutare bazată pe caractere speciale.
Semnul procent (%) înlocuieşte oricâte caractere.
Matches pattern Semnul underscore (_) înlocuieşte un caracter.
nume like "R_D%"
găseşte RADULESCU, RADU, RODICA etc.

Combinarea filtrelor - Atunci când se creează unul sau mai mai multe filtre asupra datelor, se
poate specifica dacă relaţiile dintre filtre sunt de tip AND sau OR. De asemenea, pentru condiţii
complexe, filtrele pot fi grupate.
Pentru a sorta datele în funcţie de valorile din una sau mai multe coloane se adaugă coloana în
tab-ul Sort Data, de selectează ordinea de sortare (ascendentă sau descendentă).
Ordinea de sortare va fi definită de ordinea în care sunt adăugate coloanele în tab-ul Sort Data
(figura IV.4.12.)
Figura IV.4.12. Opţiunea Sort Data

Când interogarea a fost finalizată, prin intermediul butonului Run ea va fi procesată. Pe ecran (în
fereastra principală) vor apărea rezultatele şi în proiect va fi adăugat un element specific
interogării. Aceasta va putea fi redeschisă efectuând dublu-clic pe elementul corespunzător din
fereastra Project Tree (figura IV.4.13.).

Figura IV.4.13. Rezultatele unei interogări

Pornind de la specificaţiile unei interogări, Query Builder generează cod SQL (Structured
Query Language), ceea ce înseamnă că, pentru a realiza o largă varietate de interogări de bază
sau avansate, nu este necesar ca utilizatorul să deţină cunoştinţe de informatică, dar dacă
utilizatorul este familiarizat cu limbajul SQL, el poate modifica cu uşurinţă codul generat. De
exemplu când se selectează anumite rânduri, prin intermediul opţiunii Filter Data, Query
Builder crează o clauză WHERE bazată pe informaţiile specificate de utilizator. În figura
IV.4.14. este prezentat un exemplu de cod generat (procedură SQL) de către Query Builder.

Figura IV.4.14. Exemplu de cod

IV.4.2.1. Setarea opţiunilor unei interogări

Meniul Options din Query Builder permite setarea opţiunilor pentru o anumită interogare sau
opţiuni implicite pentru toate interogările (figura IV.4.15.). Dacă s-a selectat Defaults for All
Queries, pe ecran va apărea fereastra Options. Opţiunile care vor fi setate prin intermediul
acestei ferestre vor fi aplicate tuturor interogărilor care vor fi procesate de aici înainte.
Dacă se selectează Options for This Query, pe ecran se va deschide fereastra Result
Options. Opţiunile care vor fi setate prin intermediul acestei ferestre vor rescrie opţiunile
implicite care au fost setate prin intermediul ferestrei Options (figura IV.4.14).

Figura IV.4.15. Setarea opţiunilor interogării

După ce interogarea a fost procesată, pot fi setate câteva opţiuni, prin intermediul ferestrei
Properties. Această fereastră poate fi deschisă realizând clic-dreapta pe icoana pentru
interogare din fereastra Project Tree şi apoi selectând Properties. Pentru a aplica
schimbările făcute, interogarea va trebui rulată, rezultatele putând fi suprascrise sau
salvate separat.
Setarea opţiunilor pentru o interogare specifică – utilizând fereastra Query Options 
Results, Server pot fi schimbate opţiuni ca tipul formatului rezultatului, numele datelor de
ieşire şi locul în care acestea vor fi salvate precum şi serverul unde va fi procesată interogarea
(figura IV.4.16.).

Figura IV.4.16. Setarea opţiunilor rezultatelor interogării

În zona Output data din Results pot fi văzute şi schimbate numele datelor de ieşire şi
biblioteca unde ele vor fi salvate. În mod implicit, SAS Enterprise Guide salvează datele de
ieşire ale unei interogări în prima bibliotecă în care se poate scrie: Egtask, Sasuser şi Work.
De asemenea, pot fi definite biblioteci adiţionale. Se poate utiliza opţiunea Change pentru a
specifica utilizarea unei biblioteci diferite pentru a salva datele de ieşire.
În zona SAS server for this query din Server, se poate vizualiza şi schimba serverul care va
fi utilizat pentru procesarea interogării. Dacă se doreşte schimbarea serverului utilizat, se
efectuează clic pe lista drop-down Server şi se selectează unul dintre serverele pentru care există
permisiunea de acces.
În mod implicit, SAS Enterprise Guide execută interogarea pe serverul pe care a fost rezidentă
prima tabelă inclusă în interogare.
Orice date din interogare care sunt rezidente pe alte servere sunt copiate temporar pe serverul pe
care se procesează interogarea. Deoarece este de preferat să se minimizeze volumul de date
copiate între servere, este bine ca cea mai mare tabelă să fie introdusă prima în înterogare.

IV.4.2.2. Specificarea formatului rezultatelor unei interogări

După terminarea introducerii în Query Builder a specificaţiilor interogării, se pot genera


rezultatele acesteia. În acest scop pot fi utilizate mai multe opţiuni de generare a ieşirilor.
Alegerea unui tip de rezultat înainte de rularea interogării este o garanţie a faptului că interogarea va
oferi informaţiile în formatul potrivit. De exemplu, dacă utilizatorul doreşte să vizualizeze rezultatele
interogării într-un browser Web, el poate genera rezultatele sub forma unui raport HTML.
Utilizatorul poate genera rezultatele interogarii în mai multe formate şi anume data table, data
view şi report, fiecare dintre acestea oferind diverse avantaje. Tabelul IV.4.2. prezintă
formatele de rezultate pentru o interogare şi caracteristicile lor.

Tabel IV.4.2. Formatele de rezultate pentru o interogare

Format rezultat Caracteristicele datei Rezultate interogare

Data table Stocată permanent, putând O tabelă statică asupra căreia se pot realiza
fi utilizată şi în alte scopuri prelucrări. Rezultatele nu sunt actualizate până
la reexecutarea interogării.

Data view Actualizată în permanenţă O viziune dinamică a datelor asupra căreia se


pot realiza prelucrări. De fiecare dată când
rezultatele interogării sunt deschise, acestea sunt
actualizate pentru a reflecta schimbările care s-
au realizat, între timp, asupra datelor incluse în
interogare.

Report Formatat pentru prezentare Un raport în formatul care este specificat ca


implicit (HTML, PDF, RTF text sau raport
SAS). Rezultatele nu sunt actualizate până la
reexecutarea interogării. Nu se pot efectua
prelucrări asupra acestui format de rezultat.

Data view - Dacă o tabelă de date (data table) stochează datele efective, o tabelă virtuală (data
view) conţine numai logica necesară pentru regăsirea datelor care sunt stocate în alte locaţii.
Data view-urile permit citirea dinamică a datelor fără a folosi spaţiul fizic de stocare de pe disc
pentru crearea unei noi tabele.
Acest tip de format de ieşire pentru o interogare este util deoarece:
 Salvează spaţiul de memorie prin dimensiunile lor reduse;
 Asigură faptul că seturile de date de intrare sunt întotdeuna actualizate;
 Pot ascunde de utilizatori anumite coloane confidenţiale, pot conţine coloane calculate fără
să existe vizibilitate asupra coloanelor implicate în calcul, permiţându-le în acelaşi timp să
vadă alte coloane;
 Ascund utilizatorului joncţiuni sau interogări complexe.
Setarea opţiunilor unei interogări pentru a genera ieşiri într-un anumit format şi creşterea
numărului de rânduri afişate în fereastra Preview se realizează conform următorilor paşi
(figurile IV.4.17., IV.4.18, IV.4.19)
1. În fereastra Project Tree sunt afişate seturile de date care vor fi utilizate.
2. Se selectează Tools Options.

Figura IV.4.17. Setarea Options

3. În Query, se realizează clic în box-ul Number of rows to display in preview results


window în care sa va introduce valoarea dorită (numărul de rânduri care se doreşte să fie
afişate în fereastra Preview).

Figura IV.4.18. Setarea opţiunilor unei interogări pentru a creşte numărul de rânduri care
sunt afişate în fereastra Preview

4. Se realizează clic pe lista, de tip drop-down, Save query result set as şi se selectează formatul
dorit (Data table, Data view sau Report – HTML etc). Clic OK.
Figura III.4.19. Setarea opţiunilor unei interogări pentru a genera ieşiri într-un anumit
format

IV.4.2. Crearea unei interogări pe o anumită tabelă şi adăugarea de coloane

Pentru crearea unei interogări trebuie să se parcurgă următorii paşi:


1. În fereastra Project Tree, se selectează tabela dorită pentru a face ca datele ei să devină
active.
2. Se selectează Query Bulider.
3. Se realizează dublu-clic pe coloanele dorite sau vor fi trase direct cu mouse-ul (în aceiaşi
ordine), pentru a le adăuga în tab-ul Select Data. În acest moment interogarea va conţine
coloanele care vor fi introduse în raport – figura IV.4.20.

Figura IV.4.20. Crearea unei interogări pe o anumită tabelă şi adăugarea de coloane

Crearea unei coloane calculate prin construirea unei expresii de calcul

Query Builder permite crearea unei noi coloane pe baza valorilor datelor din alte coloane, prin
specificarea, în fereastra Build an advanced expression, a expresiei care va fi folosită pentru
calculul valorilor. Acest lucru se poate realiza fie tastând expresia direct în zona Enter an
expression aflată în partea de sus a ferestrei, fie construind expresia prin selectarea valorilor şi a
operatorilor. Pentru calcule, se poate selecta o coloană a unei tabele de date din lista talelelor
disponibile în lista Tables. De asemenea, se pot regăsi valorile unor coloane individuale apasând
butonul Get Values. Aceste valori pot fi folosite ulterior în cadrul expresiilor (figura IV.4.21).
Figura IV.4.21. Utilizarea ferestrei Build an advanced expression

În scopul calculului valorilor unei coloane se pot utiliza, de asemenea, şi funcţiile. O funcţie
preia o valoare şi o transformă în altă valoare, SAS Enterprise Guide dispunând de o multitudine
de funcţii predefinite.
O expresie poate fi creată prin intermediul funcţiilor, efectuând clic pe opţiunea Functions
(figura IV.4.22.) aflat în partea de jos a ferestrei Build an advanced expression. Aceasta
permite afişarea tuturor funcţiilor grupate în categorii, precum şi afişarea tuturor funcţiilor, în
ordine alfabetică. Odată selectată o funcţie, va fi afişată adiacent şi o descriere a sintaxei
acesteia. De exemplu funcţia QTR schimbă data calendaristică într-o valoare corespunzătoare
trimestrului (1-4). Multe dintre funcţii necesită un parametru, iar comentariul afişat în expresie
indică tipul valorii care va trebui utilizat. De exemplu, funcţia QTR necesită o valoare numerică
sau o coloană cu valori numerice.

Figura IV.4.22. Utilizarea funcţiilor predefinite


IV.4.3. Exemplu de creare a unei interogări

O să presupunem că a fost ales ca format de ieşire implicit raportul HTML. În continuare se va


crea o interogare referitoare la nivelul stocurilor pentru diverse produse din cadrul unei firme.
Raportul trebuie să arate, pentru fiecare produs, care este cantitatea existentă în stoc şi cantitatea
care a fost comandată pentru reaprovizionare. Raportul va arăta ca cel din figura IV.4.23.

Figura IV.4.23. Exemplu de raport


Pentru crearea raportului se va utiliza tabela Produse, care conţine următoarele tipuri de informaţii:
cod produs, nume produs, cod furnizor, cod categorie, cantitatea pe unitatea de ambalare, preţ
unitar, unităţi în stoc, unităţi în comandă, nivelul de aprovizionare, dacă produsul a fost sau nu
discontinuu.
O imagine parţială a tabelei Produse este prezentată în figura IV.4.24.

Figura IV.4.24. Tabela Produse


Pentru realizarea interogării se vor parcurge următorii paşi:
1. În fereastra Project Tree, se selectează tabela Produse pentru a face ca datele ei să devină
active.
2. Se apasă butonul Query Builder. În mod implicit, interogarea nu va include nici o coloană.
Pentru a se realiza raportul trebuie:
 să se selecteze coloane din coloanele existente ale tabelelor disponibile;
 să se calculeze noi coloane pe baza unora existente;
 să se sorteze rândurile pe baza unor criterii.

Utilizând tabela Produse, în raport vor fi afişate următoarele coloane: nume produs, unităţi în
stoc, unităţi în comandă şi nivelul de aprovizionare. De asemenea, se va calcula o coloană nouă
şi anume valoare stoc. Rândurile vor fi sortate după valoare stoc în ordine descendentă.
În continuare vor fi prezentaţi paşii pentru realizarea acestei interogări.
Selectarea coloanelor pentru rezultatele interogării.
3. Se realizează dublu-clic pe urmăroarele coloane sau vor fi trase direct cu mouse-ul (în
aceiaşi ordine): nume produs, unităţi în stoc, unităţi în comandă şi nivelul de aprovizionare,
pentru a le adăuga în tab-ul Select Data (figura IV.4.25.).

Figura IV.4.25. Selectarea coloanelor incluse în interogare

În acest moment interogarea va conţine coloanele care vor fi introduse în raport.


Adăugarea unei coloane calculate
În noua coloană adăugată se va calcula valoarea totală a stocului fiecărui produs. În
exemplul precedent a fost creată o interogare pe tabela Produse şi au fost adăugate în interogare
coloanele selectate din tabelă. În continuare va fi creată o nouă coloană calculată numită valoare
stoc. Valorile din această coloană vor fi obţinute prin înmulţirea valorilor coloanelor preţ unitar
şi unităţi în stoc.
a) Specificarea expresiei care va fi utilizată pentru crearea valorilor noii coloane.

1. În Query Builder, se realizează clic pe Computed Columns (figura IV.4.26.).

Figura IV.4.26. Computed Columns

2. În fereastra Computed Columns, se realizează clic pe New şi se selectează Advanced


expression (figura IV.4.27.).

Figura IV.4.27. Selectarea ecranului pentru construirea expresiei


3. În lista Tables, se realizează dublu-clic pe preţ unitar.

4. Se realizează clic pe operatorul de multiplicare (figura IV.4.28.).

Figura IV.4.28. Construirea expresiei

5. În lista Tables, se realizează dublu-clic pe unitaţi în stoc.


6. Se realizează clic pe butonul OK.

b) Specificarea numelui pentru noua coloană şi a formatului.


1. Se apasă butonul Next şi se redenumeşte coloana calculată (figura IV.4.29.).

Figura IV.4.29. Opţiuni pentru coloana calculată


2. Se tastează numele variabilei, respectiv Valoare stoc (figura IV.4.30.).

Figura IV.4.30. Redenumirea coloanei calculate

3. Se finalizează definirea coloanei calculate prin apăsarea butonului Finish şi se observă că


aceasta va fi adăugată la coloanele tabelei care va rezulta în urma interogării (figura
IV..4.31.).

Figura IV.4.31. Crearea coloanei calculate


4. În tab-ul Select Data, se selectează Valoare Stoc şi se realizează clic pe butonul
Properties . (figura IV.4.32.)

Figura IV.4.32. Vizualizarea butonului Properties

5. În mod implicit nu este specificat niciun format. Pentru a-l seta se va efectua clic pe butonul
Change (figura IV.4.33).

Figura IV.4.33. Modificarea proprietăţilor coloanei calculate


6. În lista Categories se selectează Currency. În lista Formats se selectează
EUROLw.d.
7. Se realizează clic în box-ul Overall width unde se introduce valoarea 12 (figura
IV.4.34.).

Figura IV.4.34. Setarea formatului valorilor coloanei calculate

8. Prin clic pe butonul OK se închide fereastra Formats.


9. Prin clic pe butonul OK se închide fereastra Properties.
Se vor repeta aceiaşi paşi pentru a crea coloana calculată valoare comandă.
c) Sortarea valorilor din coloană şi execuţia unei interogări
Pentru a completa interogarea se vor sorta datele în ordinea descendentă a valorilor din coloana
Valoare stoc, apoi se va executa interogarea şi se va obţine raportul.
Specificarea ordinii de sortare pentru ieşiri.
1. Se execută clic pe tab-ul Sort Data (figura IV.4.35.).
Figura IV.4.35.Tab-ul Sort Data

2. În zona Computed Columns, se realizează dublu-clic pe valoare stoc.


3. Se execută clic pe lista drop-down Sort Direction şi se selectează Descending (figura
IV.4.36).

Figura IV.4.36. Selecţia ordinii de sortare

Execuţia interogării şi vizualizarea rezultatelor se realizează în felul următor:


1. În fereastra Query Builder, se execută clic pe butonul Run.
2. În fereastra Project Tree, se realizează clic pe numele implicit al interogării,
Query_for_Products, pentru a-l redenumi Valoare Stoc şi pentru a o vizualiza (figurila
IV.4.37.).

Figura IV.4.37. Vizualizare interogare


IV.4.4. Exemplu de filtrare a datelor în cadrul unei interogări

Prin filtrarea datelor se înţelege reţinerea, dintr-un set de date, numai a acelora care îndeplinesc
un anumit criteriu. De exemplu, în exemplul de mai sus, a fost creat un raport care conţine
nivelul stocului la toate produsele, dar utilizatorul doreşte să se vizualizeze numai produsele
pentru care este nevoie de reaprovizionare. Pentru a se realiza acest lucru, este nevoie să se reţină
numai rândurile care îndeplinesc un anumit criteriu, bazat pe valorile dintr-o coloană (figura
IV.4.38). În Query Builder, selectarea rândurilor poartă numele de setarea unui filtru.

Figura IV.4.38. Conceptul de filtrare

Pentru a determina dacă produsul trebuie reaprovizionat, trebuie verificat dacă numărul de unităţi
din stoc a scăzut sub nivelul de reaprovizionare, fără a se fi lansat o comandă de reaprovizionare.
Pentru a modifica raportul este necesar să se seteze un filtru prin care să se verifica cele două
condiţii, anume:
 Unităţi în stoc <= Nivelul de reaprovizionare.
 Unităţi comandate = 0.

Când se creează mai multe filtre, trebuie să se specifice dacă relaţia dintre filtre este de tip “şi”
(AND) / “sau” (OR). În exemplul de mai sus sunt necesare ambele condiţii, deci relaţia va fi
AND. Trebuie remarcat faptul că, atunci când se combină mai multe filtre, relaţia AND este
implicită.

Aplicatrea unui filtru într-o interogare

În exemplul precedent, deja a fost creată o interogare cu denumirea Valoare Stoc care generează
un raport cuprinzând stocul produselor. Să presupunem că se doreşte să fie afişate numai
produsele pentru care este necesară reaprovizionarea. În acest caz este necesară definirea unei
condiţii de filtrare prin care să se afişeze numai rândurile (produsele) pentru care valorile din
coloana Unităţi în stoc să fie mai mici decât valorile din coloana Nivel de reaprovizionare.
Pentru aceasta se vor urma următorii paşi:
1. În fereastra Project Tree, se realizează clic dreapta pe Valoare Stoc, apoi se selectează
Modify Valoare Stoc pentru a redeschide şi a modifica interogarea.
2. Se dă clic pe tab-ul Filter Data (figura IV.4.39.).

Figura IV.4.39. Selectarea opţiunii de filtrare

3. În lista de coloane a interogării se realizează dublu-clic pe coloana NumarUnitatiStoc.


4. Se realizează clic pe lista drop-down Operator şi se selectează Less than or equal to
(figura IV.4.40).

Figura IV.4.40. Editare filtru – selectare operator de filtrare


5. Se rexecută clic pe lista drop-down Value, apoi clic pe tab-ul Columns.

6. Se selectează coloana NivelReaprovizionare. Se efectuează clic pe butonul OK, iar


rezultatul este vizualizat în figura IV.4.41.

Figura IV.4.41. Condiţia unui filtru

Definirea unei a doua condiţii de filtrare, care va conţine numai rândurile pentru care valoarea
din coloana NumărUnităţiComandă este egală cu 0, se realizează în felul următor (figura
IV.4.42.):
1. În lista de coloane se efectuează dublu-clic pe NumărUnităţiComandă.
2. Se efectuează clic în box-ul Value şi se introduce valoarea 0.
3. Clic OK.
Figura IV.4.42. Realizare filtru

În figura IV.4.42. se poate observa că în cadrul clauzei WHERE, cele două condiţii sunt
combinate prin intermediul operatorului AND. Dacă s-ar dori (ceea ce nu este cazul în exemplul
de faţă) schimbarea operatorului, ar trebui urmaţi paşii de mai jos:

4. Se efectuează clic pe butonul Combine Filter (figura IV.4.43.).

Figura IV.4.43. Vizualizarea combinaţiei condiţiilor de filtrare

5. Se efectuează clic pe operatorul AND dintre cele două condiţii de filtrare. Prin această
operaţie se va deschide un meniu prin care se permite schimbarea relaţiei dintre filtre
(figura IV.4.44.).
Figura IV.4.44. Schimbarea combinaţiei condiţiilor de filtrare

Execuţia interogării şi vizualizarea rezultatelor se realizează în felul următor:

1. Se efectuează clic pe butonul Run. Când va apărea întrebarea dacă se doreşte înlocuirea
interogării precedente cu noua interogare se va efectua clic pe butonul No. Astfel, în
proiect se va crea o nouă interogare care va trebui redenumită Produse de comandat.

2. Vizualizare rezultate: în raport sunt incluse numai rândurile (produsele) care corespund
ambelor condiţii (figura IV.4.45.).

Figura IV.4.45. Vizualizare raport


Adăugarea unei coloane şi execuţia interogării
Pentru o analiză aprofundată, ar fi necesare informaţii adiţionale pentru a determina dacă aceste
produse afişate în raportul Produse de comandat mai pot fi comandate. Aceste informaţii pot fi
obţinute prin adăugarea în interogare a coloanei Discontinuu. Pentru adăugarea acestei coloane şi
pentru a o poziţiona prima în raport, trebuie urmaţii paşii de mai jos:
1. În fereastra Project Tree, se execută dublu-clic pe interogarea Produse de comandat
pentru a o deschide.
2. Se execută dublu-clic pe coloana Discontinuu pentru a o adăuga în interogare.
3. Se execută clic pe butonul săgeată Up până când coloana Discontinuu ajunge pe prima
poziţie din listă.
Execuţia interogării şi vizualizarea rezultatelor se realizează în felul următor:
1. Se execută clic pe butonul Run. La întrebarea dacă se doreşte înlocuirea rezultatelor
precedente se va răspunde prin apăsarea butonului Yes.
2. Se execută clic pe Maximize Workspace.
3. Se poate vizualiza rezultatele interogării şi se observă faptul că produsele cu o valoare
discontinuă egală cu 1 sunt discontinue şi deci nu mai trebuie reaprovizionate, fiind
vizibile numai produsele care trebuie reaprovizionate în acest moment.
IV.4.5. Joncţiunea tabelelor în cadrul unei interogări
Joncţiunea tabelelor se foloseşte atunci când se doreşte:
 Să se calculeze o nouă coloană folosind ca intrări date din coloane stocate în tabele diferite.
 Să se adauge informaţii dintr-o tabelă asociativă pentru a le introduce în tabela de analiză.
 Să se identifice dacă valorile unei coloane se regăsesc sau nu în alte tabele.
Tabelele care participă la joncţiune trebuie să aibă cel puţin o coloană comună. Această
coloană trebuie să conţină valori care să se potrivească exact sau care să poată fi cu
uşurinţă comparate între tabele (figura IV.4.46.).

Figura IV.4.46. Principiul joncţiunii între două tabele

O joncţiune creată între coloane ale căror valori au corespondent exact se numeşte joncţiune
internă şi reprezintă tipul de joncţiune implicită în SAS Enterprise Guide. Pe lângă acest tip,
sunt suportate şi alte tipuri de joncţiuni, cum sunt joncţiunile externe.
Într-o interogare se pot realiza joncţiuni între maxim 32 de tabele diferite.
Atunci când, într-o interogare, se adaugă mai mult de o tabelă, Query Builder încearcă automat
să realizeze joncţiunea între tabele, pe baza coloanelor care au acelaşi nume şi acelaşi tip.
Dacă în tabelele pe care se doreşte realizarea joncţiunii nu există coloane cu acelaşi nume, dar
există coloane care conţin date de acelaşi tip, joncţiunea poate fi realizată manual.
Query Builder nu poate să realizeze în mod automat joncţiunea dintre tabele atunci când acestea
nu conţin coloane cu nume şi conţinuturi indentice. Totuşi, dacă cele două coloane conţin
aceleaşi informaţii, joncţiunea dintre tabele se poate face manual (figura IV.4.47).

Figura IV.4.47. Joncţiunea după coloane cu nume diferit

Când utilizatorul încearcă să adauge o tabelă cu care Query Builder nu poate realiza în mod
automat joncţiunea, va deschide fereastra Tables and Joins. Pentru a realize joncţiunea dintre
tabele se va executa clic-dreapta pe coloana din prima tabelă şi se va selecta opţiunea Join
[column-name] with apoi, din meniu se va selecta coloana corespondentă din cealaltă tabelă.
O altă modalitate de a realize joncţiunea este de a selecta numele coloanei din una dintre tabele,
apoi, ţinând apăsat butonul stâng al mouse-ului, se va muta pointerul pe numele coloanei
corespunzătoare din cealaltă tabelă.
În tabelul IV.3. sunt prezentate tipurile de joncţiuni posibil de realizat într-o interogare. Zona
întunecată marchează rândurile pe care le va returna ca ieşire tipul respectiv de joncţiune.

Tabelul III.3. Tipurile de joncţiuni


Tip joncţiune Rânduri returnate de rezultatul interogării
inner Numai rândurile care au corespondent

Tabela1 Tabela 2

left outer Toate rândurile (care au corespondent şi care nu au corespondent)


din prima tabelă a interogării, plus rîndurile care au corespondent din
cea de-a doua tabelă

Tabela 1 Tabela 2

right outer Toate rândurile (care au corespondent şi care nu au corespondent)


din cea de-a doua tabelă a interogării, plus rîndurile care au
corespondent din prima tabelă

Tabela 1 Tabela 2

full outer Toate rândurile din amândouă tabelele

Tabela 1 Tabela 2

IV.4.6. Exemplu de joncţiune a tabelelor în cadrul unei interogări


Ca prezentare a facilităţii de joncţiune a tabelelor, în exemplul de mai sus, în care deja s-a
determinat care produse trebuie reaprovizionate şi care sunt produsele discontinue, se doreşte să
se creeze un raport referitor la furnizori, astfel încât să se poată comanda produsele şi la nevoie
să se poată verifica statutul lor. Informaţiile necesare acestui raport nu sunt stocate într-o singură
tabelă. Pentru a afla informaţiile referitoare la furnizorul unui anumit produs, este necesară
joncţiunea a două tabele:
 tabela Produse, care a fost utilizată şi in exemplul precedent, care conţine informaţii
referitoare la produse;
 tabela FurnizoriInfo, un fişier Microsoft Excel care conţine informaţii referitoare la
furnizori, cum ar fi numele firmei, numele şi numărul de telefon al persoanei de contact din
cadrul firmei.
Pentru fiecare produs care necesită reaprovizionare sau este discontinuu (produsele din interogarea
Produse de comandat), se doreşte să se adauge, într-un nou raport, următoarele informaţii: nume firmă,
nume de contact, telefon.
Ambele tabelele, Produse şi FurnizoriInfo, conţin o coloană comună şi anume furnizorid, aşa
încât Query Builder poate să realizeze în mod automat joncţiunea dintre ele.
În raport vor fi afişate numai produsele din ultimul raport realizat, dar în cadrul fiecărui rând vor
apărea şi informaţiile referitoare la furnizori.
Adăugarea tabelelor şi selectarea coloanelor în joncţiune
În exemplul precedent a fost creată interogarea Produse de comandat pentru a genera un raport
care să prezinte produsele care trebuie să fie reaprovizionate. Se presupune că, în acest raport,
trebuie să fie adăugate informaţiile de contact ale furnizorului, astfel încât produsele să poată fi
comandate cu uşurinţă. Pentru a introduce în raport aceste informaţii, este necasar ca în
interogare să fie adăugată tabela FurnizoriInfo. Pentru a realiza acest lucru se vor parcurge
următorii paşi:
1) În fereastra Project Tree, se execută clic drepta pe interogarea Produse de comandat
pentru a o deschide şi a o modifica (Modify Produse de comandat).
2) Se execută clic pe butonul Add Tables (figura IV.4.48.).

Figura IV.4.48. Adăugare tabelă pentru realizarea joncţiunii


3) În fereastra Open Data, se selectează Project şi se execută dublu-clic pe tabela Data
Imported from FurnizoriInfo.xls (figura IV.4.49.).

Figura IV.4.49. Selectarea unei tabele de adăugat

4) Se execută clic pe butonul Join (figura IV.4.50.).

Figura IV.4.50. Vizualizarea butonului Join

În fereastra Tables and Joins se pot vedea care sunt coloanele pentru realizarea joncţiunii
tabelelor (figura IV.4.51.).
Figura IV.4.51. Fereastra Tables and Joins

5) Se execută clic pe simbolul joncţiunii pentru a deschide o fereastră care oferă mai multe
informaţii specifice în legătură cu tipul joncţiunii şi coloanele utilizate (figura IV.4.52.).

Figura IV.4.52. Proprietăţile joncţiunii

6) Se execută clic pe butonul Close.


7) Pe lista de coloane din tabela FurnizoriInfo se execută dublu-clic pe următoarele coloane:
numefirmă, numecontact, telefon.
8) Se execută clic pe butonul Run. Când va apărea întrebarea dacă se doreşte înlocuirea
rezultatelor precedentr se execută clic pe butonul Yes. Rezultatele opţinute pot fi
vizualizate în figura IV.4.53.

Figura IV.4.53. Vizualizare rezultate interogare

În acest exemplu, în interogarea Produse de comandat care a fost creată pentru a afla informaţii
referitoare la furnizori, Query Builder a realizat în mod automat joncţiunea între două tabele
după coloana codfurnizor. Oricum, uneori este nevoie să se realizeze joncţiunea dintre tabele
care nu conţin coloane cu acelaşi nume. Dacă tabelele au acelaşi tip de date, joncţiunea poate fi
realizată manual.

Joncţiunea manuală a tabelelor

În exemplul anterior, interogarea Stoc Produse, a generat un raport al nivelului stocurilor pentru
toate produsele. În acest moment, în plus, se doreşte să se includă în raport şi numele categoriei
de produse. Tabela Produse conţine o coloană care conţine codurile categoriilor. Tabela
Categorii Produse are o coloană care conţine codurile categoriilor şi o altă coloană conţinând
numele categoriilor de produse.

Se va realiza joncţiunea dintre tabele manual şi produsele din raport vor fi sortate întâi după
numecategorie şi apoi în ordinea descrescătoare ale valorilor variabilei valoarestoc. Pentru a
realiza acest lucru vor fi urmaţi următorii paşi:
1. În fereastra Project Tree, se execută clic dreapta pe interogarea Produse de comandat
pentru a o deschide şi a o modifica (Modify Produse de comandat).
2. Se execută clic pe butonul Add Tables.
3. În fereastra Open Data, se selectează Project.
4. În fereastra Add From Project, se execută dublu-clic pe tabela Categori produse.
5. Pe ecran se va deschide o fereastră de mesaj care va informa utilizatorul că va realiza
joncţiunea tabelelor manual. Se va efectua clic pe butonul OK (figura IV.4.54).

Figura IV.4.54. Mesaj de joncţiune manuală a tabelelor

6. În lista coloanelor din tabela Produse se realizează clic pe numele coloanei codcategorie
se ţine mouse-ul apăsat până cursorul ajunge deasupra câmpului codcat din tabela
Categorii Produse (figura IV.4.55).

Figura IV.4.55. Realizarea joncţiunii manuale a tabelelor

7. Se va executa clic pe butonul OK şi apoi pe Close.

Adăugarea coloanei numecategorie, specificarea ordinii de sortare şi execuţia interogării.


1. Se execută dublu-clic pe numecategorie.
2. Se execută clic pe tab-ul Sort Data.
3. Se execută dublu-clic pe numecategorie.
4. Se execută clic pe butonul săgeată Up.
5. Se execută clic pe butonul Run. La întrebarea dacă se doreşte înlocuirea rezultatelor se va
răspunde No şi interogarea va fi redenumită Categorii Produse. Rezultatele interogării pot
fi vizualizate în figura IV.4.56.

Figura IV.4.56. Vizualizare rezultate interogare

IV.4.7. Crearea unei noi coloane prin înlocuirea valorilor


O coloană calculată se poate realiza, pe lângă modul arătat anterior, şi prin înlocuirea
(recodificarea) unor valori individuale sau a unui interval de valori dintr-o anumită coloană.
Tabelul IV.4. prezintă câteva exemple de valori recodificate.
Tabel IV.4. Exemple de valori recodificate
Element Exemplu Valoare
O valoare individuală M Masculin
F Feminin
O zonă de valori 90–100 A
80–89 B
70–79 C
60–69 D
sub 60 F

Se poate observa că recodificarea unei coloane este similară cu aplicarea unui format utilizator la
o coloană. Aplicarea unui format pe o coloană schimbă modul de afişare a valorilor datelor, în
timp ce recodificarea duce la adăugarea unei coloane noi.
În continuare, se va explicita modul de recodificarea a datelor. În următorul exemplu se va
urmări să se determine informaţii referitoare la profitul din vânzări, obţinut din produsele interne
sau din import. Tabela FurnizoriInfo conţine o coloană, numită ţară, care reprezintă ţara de
provenienţă a furnizorului produselor. Pentru a afişa datele din coloana ţară, fie ca achiziţie
internă fie ca achiziţie import, se va adăuga o nouă coloană, numită sursa, prin recodificarea
valorilor din coloana ţară. Valoarea România va fi recodată ca achiziţie internă, iar celelalte
valori ca achiziţie import. Coloana ţară rămâne neschimbată.
Se va realiza o interogare pentru a afla care a fost profitul obţinut din comenzile de produse
realizate prin achiziţie internă sau prin achiziţie din import. În acest scop, va fi de preferat să se
creeze, mai degrabă, o tabelă de date (data table) decât un raport HTML, deoarece această
tabelă va putea fi folosită ca intrare pentru o prelucrare a SAS Enterprise Guide care va realiza
un raport agregat sub formă tabelară (Summary Table).

Recodarea valorilor unei coloane

Anterior a fost creată interogarea Interogare pentru FurnizoriInfo. Pentru obţinerea


informaţiilor dorite se va adăuga o nouă colonă numită sursa prin recodificarea valorilor din
coloana ţară, iar datele vor fi sortate după valorile din coloana sursa, iar apoi după cele din
coloana ţară. Pentru a realiza aceste cerinţe se vor parcurge următorii paşi:
1. În fereastra Project Tree, se execută clic-dreapta pe interogarea Query_for_
FurnizoriInfo  Modify Query_for_ FurnizoriInfo.
2. Se execută clic pe butonul Add a New Computed Column şi se selectează opţiunea
Recoded column (figura IV.4.57).

Figura IV.4.57. Selectarea tipului de coloană

3. În fereastra Select Item, se selectează coloana ţară, apoi se execută clic pe Next.
4. În fereastra Specify a Replacement, se execută clic pe Add (figura IV.4.57).

Figura IV.4.58. Fereastra Specify a Replacement


5. În lista Value se selectează Romania şi se execută clic pe butonul OK
6. În box-ul With this value se introduce textul Achiziţii Interne
7. Se execută clic pe butonul OK.
8. În zona Replace all other values with, se selectează This value şi se introduce textul
Achiziţii Import
9. În box-ul Column Name se introduce numele coloanei Sursa (figura IV.4.59), apoi se
execută clic pe Next.

Figura IV.4.59. Introducerea numelui coloanei recodate

10. În fereastra Summary of properties se execută clic pe butonul Finish, apoi Run şi se
obţine situaţia din figura IV.4.60.

Figura IV.4.60. Vizualizare rezultate


Mutarea în sus a coloanei Sursă şi sortarea datelor.
1. Pentru a muta coloana în capul listei, se selectează coloana Sursă şi se execută clic pe
butonul săgeată Up (figura IV.4.61).

Figura IV.4.61. Mutarea coloanei Sursă

2. Se execută clic pe tab-ul Sort Data.


3. Se execută dublu-clic pe coloana sursă, apoi dublu-clic pe coloana ţara.

Specificarea unui nou tip de ieşire pentru o interogare

Pentru a creea, ca ieşire din interogare, o tabelă de date şi nu un raport HTML, se va trece de
opţiunea implicită a interogării astfel:
1. În fereastra Query Builder, se execută clic pe butonul Options şi se selectează Options
for This Query (figura IV.4.62).

Figura IV.4.62. Opţiunile butonului Options


2. Se activează opţiunea Override preferences set in Tools → Options (figura
IV.4.63.)

Figura IV.4.63. Opţiunile rezultatelor

3. Se selectează Data table.


4. Se execută clic pe butonul OK.
5. Se execută clic pe butonul Run.

De remarcat că raportul conţine noile valori în coloana Sursă

IV.4.8. Execuţia de prelucrări pe rezultatele unei interogări


Pentru multe dintre interogările create, ieşirile au fost sub formă de rapoarte HTML. Uneori, un
raport este suficient, dar alteori este nevoie ca pe rezultatele interogării, înainte să se creeze
raportul, să se realizeze alte analize. Aşa cum s-a văzut în subcapitolele precedente, dacă la
formatul de ieşire al interogării se specifică data table sau data view, pe baza rezultatelor
interogării se pot executa diverse alte prelucrări ale SAS Enterprise Guide.
De multe ori poate să apară necesitatea creeri unor rapoarte formatate care să poată fi publicate
sau trimise prin e-mail. De exemplu una dintre tabelele din interogarea Profit şi anume
VânzăriProduse, conţine informaţii care se pot schimba zilnic. După ce a fost setată interogarea
şi raportul pe care îl va genera, se vor putea realiza rulări ale interogării şi executa prelucrări,
pentru a obţine raportul referitor la profit, actualizat zilnic.

Crearea de rapoarte tip Summary Tables pe baza rezultatelor interogării

În acest raport, pentru fiecare produs se doreşte afişarea profitului mediu şi a profitului total,
precum şi numărul de comezi aferent lui. În plus, nu se vor mai repeata informaţiile Achiziţie
internă sau Achiziţie Inport pentru fiecare produs ci o singură dată pentru fiecare categorie.Dacă
se va încerca să se creeze acest raport direct din rezultatele interogării, se vor putea calcula
statistici descriptive (Descriptive Statistics) prin utilizarea mai multor coloane, dar nu se va
putea obţine prezentarea sub forma dorită. O alternativă este utilizarea prelucrării Summary
Tables pentru crearea raportului.

Cele două rapoarte prezentate în figura IV.4.64. reprezintă:


 un raport HTML generat ca ieşire a interogării;
 un raport Summary Tables generat prin execuţia unei prelucrări a SAS Enterprise
Guide pe baza ieşirii interogării (o tabelă).

Figura IV.4.64. Două variante de rapoarte

Pentru a o face mai uşor de utilizat, funcţia de prelucrare Summary Tables are o versiune de
tip wizard. Wizard-ul Summary Tables nu are toate opţiunile de formatare ale funcţiei
Summary Tables, dar poate fi util pentru multe rapoarte.
Utilizarea wizard-ului Summary Tables pentru a realiza un raport pe baza unei
interogări
Se doreşte realizarea unui raport formatat care să evidenţieze profitul mediu şi profitul total
rezultate din vânzarea fiecărui produs, grupate pe sursele de achiziţie. Pentru realizarea acestui
raport se va utiliza wizard-ul Summary Tables, urmând paşii de mai jos:
1. În fereastra Project Explorer, se selectează datele de ieşire ale interogării pentru a le
activa.
2. Se selectează Tasks Describe Summary Tables Wizard… (figura IV.4.65.).
Figura IVI.4.65. Selectarea wizard-ului Summary Tables

3. În pagina 1 se execută clic pe butonul Next.


4. În pagina 2 se specifică variabilele de analiză pentru raport. Se execută clic pe butonul Add şi se
selectează variabila Profit. Ca funcţie statistică se selectează Sum (figurile IV.4.66 şi IV.4.67).

Figura IV.4.66. Selectarea variabilei analizate

Figura IV.4.67. Selectarea funcţiei statistice

5. Deoarece se doreşte şi calculul profitului mediu, se execută din nou clic pe butonul Add şi
se selectează din nou variabila Profit, apoi se execută clic pe box-ul Statistic pentru
Profit, se selectează, din lista drop-down, Average şi se execută clic pe butonul Next
(figura IV.4.68).

Figura IV.4.68. Adăugarea funcţiei Average

6. În pagina 3 se specifică variabilele după care se va face clasificarea în raport. Pentru


aceasta, în zona Rows se execută clic pe butonul Add şi se selectează variabila Source.
7. Se realizează, din nou, clic pe butonul Add şi se selectează variabila NumeProdus (figura
IV.4.69).

Figura III.4.69. Adăugarea variabilei NumeProdus

7. Se realizează clic pe butonul Next.


În pagina 4 a wizard-ului, se specifică totalurile raportului, astfel:
1. Se realizează clic pe lista drop-down Rows şi se selectează opţiunea Totals at each level
(figura III.4.70).
Figura IV.4.70. Selectarea opţiunii Totals at each level

2. Se realizează clic pe butonul Next.


3. În pagina 5 a wizard-ului se realizează, din nou, clic pe butonul Next.
În pagina 6 a wizard-ului se specifică titlul raportului şi se şterg notele de subsol ale acestuia,
astfel:
1. În box-ul Table Titles se introduce titlul raportului,
2. Se realizează clic pe box-ul Footnote pentru a putea şterge zona rezervată notelor de
subsol.
3. Se va executa prelucrarea Summary tables şi se vor putea vizualiza rezultatele acesteia,
respectiv raporul dorit şi apoi se realizează clic pe butonul Finish. Astfel s-a realizat, pe
baza rezultatelor interogării, un raport totalizator formatat (figura IV.4.71).

Figura IV.4.71. Exemplu de raport totalizator


IV.4.9. Crearea şi utilizarea parametrilor într-o interogare

Se urmăreşte să se afle profitul generat de vânzările produselor din anume categorii. Acest lucru
poate fi realizat în două variante şi anume:
 să se utilizeze un filtru, pentru a selecta datele aparţinând unei anumite categorii de produse şi
apoi, de fiecare dată când se doreşte vizualizarea rezultatelor din diferite categorii, să se editeze
condiţia de filtrare.

1. să se creeze un parametru. Se poate realiza o listă de selecţie care să permită utilizatorului, ca


înainte de execuţia interogării, să selecteze una sau mai multe categorii de produse. Când într-o
interogare se utilizează un filtru cu parametru, acest filtru este dinamic.
Crearea unei interogări care să accepte un parametru se realizează în doi paşi:
1. Crearea unui parametru care să permită selectarea uneia sau mai multor variabile.
2. Setarea unui filtru bazat pe acest parametru.
Când se crează un parametru, de fapt se crează o variabilă specială numită macro-variabilă.
Aceasta stochează valorile furnizate de utilizator, respectiv, în exemplul de mai sus categoriile de
produse selectate. Un filtru dintr-o interogare poate referi valoarea stocată într-o macro-variabilă.
De exemplu în interogare se poate specifica, ca parametru, o macro-variabilă numită
&Categorie şi apoi să se seteze un filtru pe valoarea egală cu valoarea din variabila
&Categorie.
Parametru
Macro-Variabilă Operator Valoare furnizată de utilizator
&Categorie = Mobilier

Filtru
Coloană Operator Valoare
NumeCategorie = &Categorie

Când se execută o interogare cu parametru, utilizatorul va fi solicitat să selecteze o valoare


pentru coloană şi apoi se vor afişa numai rândurile corespunzăroare acelei coloane. În exemplul
de mai sus, utilizatorului i se va cere să selecteze o anumită caregorie de produse şi apoi vor fi
afişate numai produsele din categoria resepectivă (figura IV.4.72).
Figura IV.4.72. Selectarea valorii pentru un parametru

Parametrii pot fi creaţi, în Query Builder, prin intermediul ferestrei Parameters Manager,
care poate fi deschisă din meniul Tools prin selecţia opţiunii Parameters.
De exemplu, pentru a crea o interogare care să genereze profitul realizat de o anumită categorie
de produse, selectate de utilizator în momentul execuţiei interogării, se va realiza un parametru
pentru variabila NumeCategorie, respectiv o listă cu categoriile de produse, iar apoi un filtru
care va utiliza valorile stocate în parametru. În acest scop se vor urma paşii de mai jos:

Crearea parametrului

1. Se selectează opţiunile View Prompt Manager (figura IV.4.73).

Figura IV.4.73. Activarea ferestrei Prompt Manager

2. Se execută clic pe butonul Add din fereastra Prompt Manager (figura IV.4.74).

Figura IV.4.74. Adăugarea unui parametru


3. În câmpulul Name se introduce textul Category
4. În câmpulul Display text se introduce numele Selectaţi o categorie de produse (figura
IV.4.75).

Figura IV.4.75. Specificarea parametrului

5. Se execută clic pe tab-ul Prompt Type and Values.


6. Se realizează clic pe lista drop-down Prompt type şi se selectează opţiunea Text, apoi
User selects values from a static list (figura IV.4.76).

Figura IV.4.76. Specificarea tipului parametrului


7. Se execută clic pe Get Values… şi se selectează setul de date sursă/coloana
corespunzătoare.
8. Se obtin valorile efective cu ajutorul butonului Get Values, apoi se selectează toate
valorile (figura IV.4.77).

Figura IV.4.77. Selectarea sursei de căutare (tabelei) pentru parametru

9. Se încarcă lista de variabile din setul de date sursă şi apoi se execută clic pe butonul OK
(figura IV.4.78).

Figura IV.4.78. Selectarea sursei de căutare pentru parametru

Crearea filtrului

Specificarea condiţiilor de filtrare se ca face urmând paşii de mai jos:


1. În fereastra Project Explorer se realizează dublu-clic pe setul de date de lucru,
accesându-se Query Builder din meniu.
2. Se selectează toate variabilele, apoi se execută clic pe tab-ul Filter Data.
3. Se execută dublu-clic pe CategoryName.
4. Se execută clic pe lista drop-down Value, apoi clic pe tab-ul Prompts.
5. Se selectează &Categorie.
6. Se execută clic pe butonul OK. În acest moment condiţia de filtrare este setată.
Execuţia interogării, selectarea unei categori de produse şi vizualizarea rezultatelor.
1. Se realizează clic pe butonul Run.
2. După deschiderea ferestrei, se execută clic pe lista drop-down şi se selectează categoria
dorită.
3. Se execută clic pe butonul Run şi se vizualizează rezultatele.

IV.4.10. Gruparea, sintetizarea şi filtrarea datelor grupate


Până în prezent, s-au creat interogări ale căror ieşiri afişează rânduri individuale din tabele. De
exemplu, aceasta interogare afişează un rând pentru fiecare comandă pentru un anumit produs.
Dar ce se întâmplă dacă se doreşte să se totalizeze rapid datele pe categorii de produse? De
exemplu, să presupunem că este nevoie să se vadă profitul pentru diverse categorii de produse,
dar numai profitul total pentru fiecare categorie, nu profitul pentru fiecare comanda. În
exemplele precedente s-a văzut cum se poate utiliza opţiunea Summary Tables pentru a crea
un tabel totalizator formatat. De asemenea, pentru a grupa şi sintetiza datele, se poate utiliza
facilitatea de interogare.
Pentru a grupa şi sintetiza datele într-o interogare se vor parcurge următorii paşi:
 Se atribuie o variabilă de grupare pentru a defini grupurile care se doresc a se vedea;
 Se selectează o variabilă de analiză pentru sintetizare şi pentru calculul statisticilor;
 Se elimină coloanele care nu sunt folosite nici pentru grupare şi nici pentru sintetizare,
obţinându-se astfel, la ieşire, numai un singur rând pentru fiecare variabilă de grupare.
Când se aplică prelucrarea Summary Statistics pe o coloană, este creată o nouă coloană cu un
nume care se termină cu numele statisticii aplicate. De exemplu, dacă se selectează statistica
“Mean” pentru coloana Salariu, coloana calculată va fi numită “Salariu_Mean”.
Filtrarea datelor grupate
În exemplele precedente au fost sintetizate datele prin grupare. Rezultatul interogării a afişat un
grup pentru fiecare categorie de produse, împreună cu profitul total şi profitul mediu. În
continuare, se doreşte să se vadă numai categoriile de produse pentru care profitul este mai mare
sau egal cu $9,000. Pentru a selecta grupuri pe baza profitului se poate utiliza facilitatea “group
filter”. Filtrul de grup se aplică numai la valori sintetizate într-un grup, nu la rânduri individuale
de date. Când se setează filtrul de grup, interogarea selectează doar categoriile în care profitul
este mai mare sau egal cu 9.000.
Filtrul pentru datele sintetizate se defineşte prin intermediul tab-ului Filter Data şi a opţiunii
Prompt Manager cu ajutorul cărei se realizează parametrul Limita (figura IV.4.79).
Figura IV.4.79. Filtrarea datelor sintetizate

Crearea unui filtru de grup

Prelucrarea Summary Statistics a generat informaţii de sinteză (suma şi media) privind


fiecare categorie de produse şi profit. Se presupune că se doreşte doar un subset de informaţii,
astfel încât raportul să arate doar categoriile de produse care au generat un profit total mai mare
de 9.000.
Acest lucru se poate realiza prin specificarea unui filtru de grup pentru coloana Profit_Sum.
Paşii care trebuiesc urmati sunt cei de mai jos.
Setarea unui filtru de grup.
1. În fereastra Project Explorer, double-clic pe setul de date rezultat ca urmare a prelucrării
Summary Statistics.
2. Clicpe tab-ul Filter Data.
3. Se selectează Profit_Sum. Din lista Operator se selectează Greater than.
4. În caseta Value se selectează &Limita din Prompts.
5. Clic OK.
Se rulează interogarea, se introduce valoarea pentru limita aferentă coloanei Profit_Sum şi se
vizualizează rezultatele.

IV.4.11. Utilizarea jonctiunilor de tip Outer


În exemplele precedente, dacă este nevoie să se cunoască informaţii referitoare la furnizorii de
produse s-a creat interogarea în care s-a utilizat o joncţiune de tip inner join pentru a selecta
numai rândurile care au corespondent atât în tabela Produse, cât şi în tabela Furnizori. Cu toate
acestea, uneori poate fi necesar să se utilizeze joncţiuni de tip outer joins.
O joncţiune de tip outer join combină şi afişează toate rândurile care au corespondent în toate
tabelele plus o parte sau toate rândurile care nu au corespondent. Acest tip de joncţiune se poate
privi ca o expandare a joncţiunii inner; outer join returnează toate rândurile returnate de inner
join plus altele adiţionale. În continuare se va exemplifica modul de combinare a tabelelor Produse
şi Furnizori. Aceste tabele sunt combinate automat după coloana ID_Furnizor. Tabelul de mai jos
descrie rezultatele diferitelor tipuri de joncţiuni outer ale tabelelor Produse şi Furnizori,
considerând că tabela Produse este prima tabelă din joncţiune.

Tabel IV.5. Tipuri de joncţiuni outer


Tip de Outer Join Rezultatul interogării

left toate rândurile din Produse, plus rândurile cu corespondent în Furnizori

Produse Furnizori

right toate rândurile din Furnizori, plus rândurile cu corespondent în Produse

Produse Furnizori

full toate rândurile atât din Produse, cât şi din Furnizori

Produse Furnizori
IV.5. Prelucrarea datelor şi personalizarea rezultatelor
Prelucrările SAS EG genereză cod SAS şi rezultate formatate. Prelucrările includ proceduri SAS care
variază de la simple liste de date, la cele mai complexe proceduri analitice, cum ar fi credit scoring.

IV.5.1. Caracteristici generale ale procedurilor de date


După ce, în proiect au fost introduse datele, se pot crea rapoarte sau se pot executa proceduri pentru
analiza datelor. În acest scop se poate selecta o procedură din Task List sau din meniul Tasks.
Anumite prelucrări beneficiază de un instrument opţional de tip Wizard care poate fi folosit
pentru a seta rapid rezultatele prelucrării. Prelucrările Summary Statistics, Summary
Tables, Bar Chart, Pie Chart şi Line Plot beneficiază de un asistent de configurare opţional
de tip Wizard. Prelucrările create cu un astfel de instrument sunt identificate cu o baghetă pe
iconiţa corespunzătoare prelucrării. Pentru a reveni la caseta de dialog tradiţională a prelucrării,
după ce aceasta a fost creată cu un asistent de configurare, se face clic dreapta pe pictograma
asociată prelucrării şi se selectează opţiunile Open -> Open In Advanced View....

IV.5.1.1. Selectarea variabilelor analizate şi a rolurilor


În SAS Enterprise Guide, fereastra aferentă prelucrărilor (task-urilor) are un format standard
(figura IV.5.1), astfel încât utilizatorul, dacă este familiarizat cu execuţia unui task, să le poată
utiliza cu uşurinţă pe celelalte.
În partea stângă a fiecărei ferestre de prelucrare se găseşte un panou de selecţie care se utilizează
pentru selecţia grupurilor de opţiuni aferente prelucrărilor. De asemenea, toate procedurile au o
zonă de date (Data) prin intermediul căreia utilizatorul va aloca variabilele la rolurile prelucrării.

Figura IV.5.1. Exemplu de fereastră de prelucrare


Box-ul Variables to assign listează variabilele (coloanele) din setul de date. Pictograma
alăturată fiecărei variabile indică tipul acesteia şi anume reprezintă o variabilă de tip
character, o variabilă de tip numeric în format timp, o variabilă de tip numeric în format
dată, iar o variabilă de tip numeric în format monedă.
Box-ul Task roles listează modurile în care variabilele pot fi utilizate de către prelucrare.
Pentru a putea fi executată a anumită prelucrare, este necesar ca cel putin o variabilă să fie
selectată în rolul List variables.
Pictogramele din dreptul fiecărui rol indică tipul de variabilă care poate fi alocat acelui rol. De
exemplu, rolul List variables acceptă toate tipurile de variabile, dar rolul Total of acceptă
numai variabile numerice.
Atribuirea variabilelor la roluri se realizează prin tragerea lor din lista Variables to assign în
rolul adecvat aflat în lista Task roles. Dacă unui anumit rol au fost asignate mai multe
variabile, acestea pot fi ordonate prin intermediul butoanelor cu săgeţi.
Pentru anumite roluri, numărul de variabile care le pot fi asignate este limitat, caz în care limita
este indicată sub numele rolului. De asemenea, pentru fiecare prelucrare există mai multe opţiuni
care, în panelul de selecţie, sunt grupate pe categorii. Multe dintre prelucrări pemit specificarea
de titluri şi de footnote-uri pentru rezultatele aferente lor.
Din moment ce au fost asignate variabile la roluri şi au fost setate opţiunile prelucrării, SAS
Enterprise Guide generează cod SAS pe care utilizatorul îl poate vizualiza prin intermediul
butonului Preview code.
Prin utilizarea butonului Run, codul este trimis motorului SAS şi executat. După execuţie,
utilizatorul poate accesa datele de intrare, precum şi toate ieşirile prelucrării făcând clic pe tab-
urile din zona de lucru.
Deşi, când se execută prelucrarea fereastra aferentă ei se închide, selecţiile făcute sunt salvate şi
se poate redeschide prelucrarea prin utilizarea butonului Modify Task din panelul de
instrumente al zonei de lucru.
Dacă prelucrarea nu este deschisă în zona de lucru, ea se poate redeschide şi făcând clic-dreapta
pe numele ei din zona aferentă arborelui proiectului (Project Tree) şi selectând opţiunea
Modify task-name.

IV.5.1.2. Exportarea rezultatelor

Rezultatele prelucrării pot fi exportate sau trimise prin e-mail din zona aferentă arborelui
proiectului (Project Tree) sau din cea aferentă fluxului de process (Process Flow).
Rezultalele pot fi exportate ca raport într-un fişier în format SAS Report (*.srx) sau în alte
formate ca html, xml sau pdf (figura IV.5.2.).
Figura IV.5.2. Exportul rezultatelor prelucrărilor

Raportul poate fi exportat direct sau exportul se poate adăuga ca un pas de export la proiect,
astfel încât raportul să fie exportat de fiecare dată când proiectul este rulat.

Trimiterea rezultatelor se face prin e-mail, putându-se opta pentru una dintre cele trei variante: e-
mail recipient – prin care se trimite o arhiva .zip care conţine documentul raport SAS cu
extensia .srx, e-mail recipient as a step in project sau documente Word, Excel, Power
Point.

IV.5.1.3. Includerea parametrilor în prelucrări


Parametrii oferă posibilitatea utilizatorului de a introduce date în SAS Enterprise Gude în timpul
executării codului. Includerea parametrilor în cod creşte capacitatea de reutilizare a codului
(figura IV.5.3. şi IV.5.4).
Se pot defini parametri care să ceară utilizatorului să selecteze sau să introducă una sau mai
multe valori atunci când se execută o prelucrare, o interogare, un program sau o procedură
stocată.

De asemenea, parametrii permit utilizatorului să furnizeze numele unei variabile pentru a rula o
prelucrare sau o valoare pentru expresia unui filtru într-o interogare sau program.
Figura IV.5.3. Definirea opţiunilor generale ale unui parametru

Figura IV.5.4. Definirea tipului si variabilelor unui parametru

La momentul execuţiei, pentru fiecare parametru se generează una sau mai multe macro-
variabile. Definirea unui parametru se poate realiza selectând din meniul View opţiunea
Prompt Manager.
IV.5.1.4. Personalizarea stilului de afişare
SAS Enterprise Guide foloseşte un stil implicit pentru afişarea rezultatelor generate în format
HTML. Un stil poate fi descris ca un set de specificaţii care controlează afişarea unui rezultat de
tip HTML şi care este bazat pe Cascading Style Sheets (CSS).
Un CSS este un fişier care conţine instrucţiuni despre modul cum să se afişeze conţinutul unui
document HTML. Un CSS poate controla aproape orice aspect al formatării unei pagini HTML,
inclusiv stiluri şi fonturi ale textului, culori, margini sau imagini. După modificarea unui stil,
rezultatul nu trebuie reexecutat pentru ca stilul să fie aplicat. Se poate adăuga un stil nou prin
referirea unui stil stocat într-un document extern sau pornind de la un stil predefinit în SAS EG.
Mai departe, utilizatorul poate pesonaliza stilul cu ajutorul Style Manager. Stilurile predefinite
oferite de SAS nu pot fi modificate din editor, numai o copie a acestora poate fi modificată.
Instrumentul Style Manager (figura IV.5.5.). poate fi folosit pentru a modifica stilul implicit
sau pentru a adăuga, şterge sau edita stiluri existente.

Figura IV.5.5. Style Manager


IV.5.1.5. Combinarea rezultatelor unui proiect

Rapoartele compuse permit combinarea rezultatelor mai multor prelucrări din proiect într-un
singur document. Facilitatea se accesează selectând opţiunile File  New  Report (figura
IV.5.6.).

Figura IV.5.6. Raport compus

Atunci când se previzualizează sau salvează documentul, SAS Enterprise Guide include
rezultatele HTML create la ultima execuţie a fiecărei prelucrări. Documentul este actualizat
dinamic.

IV.5.2. Generarea statisticilor Summary

Prin intermediul funcţiei Summary Statistics pot fi realizate un raport, care poate include
histograme şi, la alegere, prin opţiunea Save statistics to dataset, un set de date în format SAS,
care poate fi exportat în Microsoft Excel (figura IV.5.7.).
Figura IV.5.7. Rezultate Summary Statistics

IV.5.2.1. Prelucrarea Summary Statistics


Prelucrarea Summary Statistics dispune de un wizard precum şi de un box standard de dialog
care pot fi utilizate pentru setarea rezultatelor.
Box-ul standard de dialog poate fi accesat din meniul Task selectând opţiunea Describe şi apoi
opţiunea Summary Statistics, iar wizard-ul prin intermediul opţiunilor Describe ->
Summary Statistics Wizard (figura IV.5.8.).

Figura IV.5.8. Lansarea în execuţie a prelucrării Summary Statistics


Prelucrarea Summary Statistics are următoarele roluri (figura IV.5.9.):
 Calcularea de statistici pentru variabilele numerice selectate de utilizator.
 Specificarea variabilelor ale caror valori definesc grupuri.

Figura IV.5.9. Rolurile prelucrării Summary Statistics

În plus, prin setarea opţională (Group variable) şi intermediul butonului Advanced, sunt
oferite următoarele facilităţi:
 Group variable - pentru fiecare grup vor fi generate statistici descriptive separate.
Grupurile vor fi determinate prin intermediul valorilor variabilelor asignate acestei
facilităţi.
 Frequency count - se va analiza frecvenţa de apariţie a unei variabile.
 Relative weight - se va defini o variabilă ale cărei valori vor fi utilizate pentru a
calcula medii ponderate, dispersii şi sume.
 Copy Variable - variabilele asignate acestei facilităţi vor fi incluse ca valiabile adiţionale
în setul de date de ieşire.
Prin intermediul acestei prelucrări, utilizatorul poate opta pentru obţinerea anumitor statistici şi
rezultate (figurile IV.5.10. şi IV.5.11.)

Figura IV.5.10. Alegerea rezultatelor


Figura IV.5.11. Alegerea statisticilor
O dată realizată prelucrarea Summary Statistics prin intermediul wizard-ului aferent ei, efectuând
clik-stânga pe pictograma ei din cadrul ferestrei Project Tree, şi selectând opţiunea Open în
Advanced View (figura IV.5.12.), utilizatorul poate alege între alte câteva opţiuni avansate, şi
anume:
 sortarea după o variabilă de clasificare
 aplicarea unui anumit format unei variabile de clasificare
 includerea în calcule a valorilor lipsă
 specificarea de combinaţii pentru variabilele de clasificare

Figura IV.5.12. Opţiuni adiţionale


Dacă pentru rolul Classification se selectează una sau mai multe variabile, pentru specificarea
nivelului de sumarizarea a datelor se poate selecta una dintre următoarele opţiuni (figura
IV.5.13.):
 sumarizarea numai după combinaţia tuturor variabilelor de clasificare (N-way only)
 sumarizarea tuturor combinaţilor variabilelor de clasificare (All ways)
 indicarea unor combinaţii specifice pe baza cărora vor fi sintetizate datele (Specify
ways)

De exemplu, dacă se selectează trei variabile pentru clasificare, utilizatorul poate specifica toate
combinaţiile, două variabile sau trei variabile prin introducerea în câmpul text a cifrelor 1, 2 sau
3. Dacă sumarizarea se face după 0 variabile, se vor calcula statisticile pentru întreg setul de
date.

Figura IV.5.13. Combinarea variabilelor de clasificare - opţiuni adiţionale

IV.5.2.2. Prelucrarea Summary Tables

Prelucrarea Summery Tables afişează statisticile descriptive, pentru una sau mai multe variabile,
sub forma unui tabel tabular (figura IV.5.14).
Figura IV.5.14. Prelucrarea Summary Tables

În cadrul acestei prelucrări, utilizatorul poate seta variabilele analizate, statisticile care vor fi
calculate precum şi forma raportului (figura IV.5.15).

Figura IV.5.15. Realizarea raportului Summary Tables

Variabilele analizate trebuie să fie întodeauna numerice. Variabilele de clasificare sunt, de obicei
de tip caracter sau numerice discrete, dar pot fi şi valori numerice continue care au aplicat un
format discret.
Modul în care se selectează variabilele analizate, statisticile precum şi variabilele de clasificare
se poate observa în figurile IV.5.16. şi IV.5.17.
Figura IV.5.16. Selectarea statisticilor

Figura IV.5.17. Selectarea variabilelor de clasificare

Includerea tipurilor de totaluri pentru coloane, rânduri şi pagini se poate realiza conform figurii
IV.5.18.

Figura IV.5.18. Specificarea totalurilor


Se vor obţine rezultate intermediare pe baza cărora utilizatorul poate să stabilească ce modificări
mai doreşte să efectueze (figura IV.5.19.).

Figura IV.5.19. Rezultate intermediare

Rolul Summary Tables se foloseşte pentru a modifica etichetele, fonturile şi formatele din
tabela rezultatelor (figura IV.5.19).

Figura IV.5.19. Definirea formei tabelei


Pentru îmbunătăţirea aspectului tabelei rezultatelor (figura IV.5.20.), se poate utiliza opţiunea
Table Proprieties a prelucrării (prin clic-dreapta în zona aferentă fiecărui element şi
schimbarea proprietăţilor), pentru a realiza:
 schimbarea etichetei pentru valorile lipsă (din simbolul . în alt simbol)
 schimbarea modului implicit de afişare a valorilor statisticilor din raport
 asignarea unei etichete descriptive la o variabilă sau eliminarea unei etichete
 asignarea unui format de afişare specific la fiecare statistică descriptivă, în mod individual
 adăugarea de note adiţionale sau text în zona box-ului tabelei

Figura IV.5.20. Schimbarea propietăţilor elementelor tabelei


IV.5.3. Realizarea unei prognoze cu ajutorul modelului ARIMA
(Autoregresive Integrated Moving Average)
Setul de date de intrare sunt formate din înregistrări din 10 în 10 minute, începând de la
01.01.2014 până la 31.03.2014 (ora 19:50) a puterii produse de un panou solar pentru asigurarea
apei calde menajere. Datele au fost prelucrate, puterea generată fiind raportată la puterea maximă
generată.
În exemplul următor vom realiza prognoza pe termen scurt pentru următoarele 23, respectiv 12
de intervale de timp (cca. 4, respectiv2 ore).
Importăm în SAS datele de intrare (peste 50,000 de înregistrări) stocate într-un fişier în format
.xlsx.
În continuare, sunt descrise câteva forme ale modelului ARIMA(p,d,q):
- model autoregresiv ARIMA(p,0,0) , de ordin p. Această componentă este adecvată pentru
procese sau fenomene repetabile;
- model cu medie mobilă ARIMA(0,0,q), de ordin q. Această componentă este adecvată
pentru procese sau fenomene mai puţin predictibile;
- model mixt ARIMA (p,0,q), cunoscut şi ca ARMA;
- model autoregresiv integrat şi medie mobile ARIMA(p,d,q), unde d este ordinul de
diferenţiere.
Pentru a aplica modelul ARIMA (1,0,0), vom selecta Tasks  Time Series Arima
Modeling and Forecasting (figura IV.5.21.).

Figura IV.5.21. Prelucrarea ARIMA

Pentru setarea analizei urmăm paşii:


 În tab-ul Data se selectează Norm pentru Time series variable şi Write time pentru
Time ID variable.
 În tab-ul Estimation  Enable estimation steps se bifează Perform estimation
steps.
 În tab-ul Model definition, se adaugă 1 în caseta Factors for AR model.
 În tab-ul Forecasting  Enable forecasting steps, se bifează Perform forecasting
steps.
 În tab-ul Options, la opţiunea Time interval between option se selectează Number of
units, la opţiunea Time units per interval se introduce 600, iar la opţiunea Number of
intervals to forecast se introduce 23 (precum în figura IV.5.22.).
 În tab-ul Plots and Results, se bifează Forecasts şi Save forecasts şi se execută prin
butonul Run.

Figura IV.5.22. Etapele prelucrării ARIMA

În tabul Results obţinem un raport pe care îl analizăm.

Figura IV.5.23. Raportul prelucrării ARIMA


În tabul Output Data (figura IV.5.24.) exportăm rezultatele într-un fişier Excel pentru a calcula
eroarea medie absolută în procente - MAPE (Mean Absolute Percentage Error). Se vor
prelua din setul de date complet efectiv înregistrate din 31.12.2014 (de la 20:00 la 23:50) şi se
vor compara cu datele din aceeaşi perioadă, prognozate cu modelul ARIMA.

unde: Yactual – valoarea înregistrată, Yforecast – valoare prognozată.

Figura IV.5.24. Setul de date rezultat al prelucrării ARIMA


Acest indicator statistic arată acurateţea modelului. MAPE (eroarea medie absolută în procente)
calculat pentru 4 ore din 31.12.2014 este 13,32%, iar MAPE pentru 2 ore este 9,58%.
Pentru a aplica modelul ARIMA (1,1,1), pornind de la fişierul importat
time_series_prognoza.xlsx, vom selecta Tasks  Time Series Arima Modeling and
Forecasting.

Pentru setarea analizei urmăm paşii:


 se selectează din tabul Identification  Differencing
 se bifează Difference the responce series, Differencing lags = 1 (dacă nu este
introdus).
 în tab-ul Estimation  Enable estimation steps se bifează Perform estimation
steps.
 în tab-ul Model definition, se adaugă 1 în caseta Factors for AR model şi 1 în
caseta Factors for MA model.
 în tab-ul Forecasting  Enable forecasting steps, se bifează Perform
forecasting steps.
 în tab-ul Options, la Time interval between option se selectează Number of
units, la Time units per interval se introduce 600, iar la Number of intervals to
forecast se introduce 23.
 în tab-ul Plots and Results, se bifează Forecasts şi Save forecasts.
 Se lansează în execuţie prin butonul Run.
În tabul Results se obţine un raport pe care care va fi analizat. Prin intermediul opţiunii
Output Data se exportă rezultatele într-un fişier Excel pentru a calcula eroarea medie absolută
în procente - MAPE (Mean Absolute Percentage Error). Se vor compara datele efectiv
înregistrate din fişierul time_series_complet.xls cu datele prognozate. MAPE calculat pentru 4
ore din 31.12.2014 este 4,76%, iar MAPE pentru 2 ore este 4,51%.

IV.5.4. Crearea şi aplicarea formatelor personalizate


Formatele pot fi utilizate fie pentru a controla aspectul afişării datelor, fie pentru a grupa valorile
datelor pentru analize (figura IV.5.25.). În exemplul prezentat, se realizează şi se utilizează un
format personalizat (Marja_cantitate) pentru coloana Cantitate.
Pentru a realiza un nou format se accesează procedura Create Format, din maniul bară iar apoi
se selectează opţiunile Data  Create Format…. Selectând mai departe Options se
deschide fereastra din figura IV.5.26., prin intermediul căreia de pot introduce opţiunile legate de
format, respectiv numele formatului, tipul acestuia (numeric sau character), lăţimea lui şi locaţia
în care el va fi stocat.
Figura IV.5.25. Formate personalizate
Figura IV.5.26. Fereastra Options

Câmpul Format name - Numele formatului trebuie să înceapă cu o literă sau cu caracterul
underscore şi nu se poate termina cu o cifră. Pentru un set complet de reguli pentru nume se va
selecta opţiunea Help din procedura Create Format.
Opţiunea Currently assigned libraries. WORK (temporary) – Implicit există numai pe
durata unei sesiuni SAS Enterprise Guide. Când se încheie sesiunea, formatul este şters. Aceasta
înseamnă că dacă se închide sesiunea de lucru apoi se redeschide, pentru a putea utilizeze
formatul, trebuie reexecutată procedura Create Format.
În fereastra Define formats (figura IV.5.27.), se construieşte o tabelă de corespondenţă pentru
a asocia valorile datelor cu valorile formatate. Se defineşte o etichetă pentru a specifica textul
care va fi afişat în locul datelor originale.

Tipuri de coloane
 Discrete - acceptă valori singulare, de exemplu Europa sau OK.
 Range - acceptă o valoare limita-minimă, cum ar fi 100 şi o valoare limită-maximă, ca 200,
pentru a defini o gamă de valori. Punctele extreme pot fi proiectate ca inclusive sau exclusive.
Trebuie remarcat faptul ca definiţiile formatului sunt case-sensitive. Prin urmare textul furnizat
prin intermediul câmpului Values al procedurii Create Format trebuie să fie identic cu textul
din coloana sau coloanele din tabela de date asupra cărora se va aplica formatul.
Dacă în coloana tabelului sunt stocate valori într-o varietate de forme, de exemplu OK, ok, oK
sau Ok, utilizatorul trebuie să definească, în definiţia formatului, fiecare variantă posibilă.

Figura IV.5.27. Fereastra Define Formats

În figura IV.5.28. se poate observa modul în care se definesc etichetele.


În box-urile Values nu este permisă introducerea cuvintelor cheie High şi Low. Acestea se vor
selecta din lista drop-down.
Simbolurile următoare indică dacă valorile limită ale gamei de valori sunt incluse sau excluse:
Exclude valorile din stânga sau din dreapta.
Include valoarea din stânga, dar exclude valoarea din dreapta.
Exclude valoarea din stânga, dar include valoarea din dreapta.
Include valoarile din stânga şi din dreapta.
Figura IV.5.28. Fereastra Define Formats – definire etichete

Aplicarea formatului la o coloană specifică

Utilizarea metodei de a specifica un format de coloană se aplică numai în cazul unei prelucrări
particulare (figura IV.5.29.).

Figura IV.5.29. Prelucrarea List Data – aplicarea formatelor

Pentru a aplica formatul la o coloană dintr-un set de date SAS în mod permanent, trebuie să se
modifice propietăţile coloanei în Query Builder sau în Data Grid (modul editare), un anumit
format putând fi aplicat mai multor coloane.
IV.6. Concepte privind programarea SAS şi lucrul cu programe SAS
Fiecare prelucrare din SAS Entreprise Guide corespunde uneia sau mai multor proceduri. Pentru
a determina care procedură sau proceduri corespund unei anumite prelucrări, se selectează
fereastra procedurilor (din meniul bară se selectează opţiunile View  Tasks).
De asemenea, opţiunea Help permite să se identifice procedura SAS corespunzătoare. În
fereastra Help, utilizatorul va fi capabil să vizualizeze codul procedurii (figura IV.6.2).

Figura IV.6.2. Vizualizarea codului SAS al unei proceduri SAS

Fişierele cu care lucrează SAS la nivel de cod sunt de două tipuri pricipale care sunt reliefate şi
în Figura IV.6.3.: preluate, adică importate din alte aplicaţii (externe), şi fişiere generate de
către SAS (interne), care pot fi temporare (stocate în librăria Work) sau permanente (stocate în
alte librării sau directoare decât Work).

Figura IV.6.3. Tipuri de fişiere în SAS

În cadrul exemplului din figura IV.6.4. declaraţia LIBNAME furnizează produsului SAS
Entreprise Guide 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.
Secţiunea de date DATA poate include declaraţii care generează tabele SAS sau manipulează
tabele existente. În aceeaşi secţiune pot fi introduse declaraţii pentru mai multe tabele.
Procedura PRINT tipăreşte observaţiile dintr-o tabelă SAS utilizând în acest scop o parte sau
toate variabilele din aceasta. Procedura corespunde prelucrării List Data din cadrul opţiunilor
SAS Enterprise Guide.
Procedura MEANS calculează principalii indicatori statistici pentru diferite variabile numerice.
Această procedură corespunde prelucrării Summary Statistics din SAS Enterprise Guide.
Declaraţia VAR (prescurtarea de la variabile) furnizează procedurii MEANS o listă cu variabile
de analiză (care trebuie să fie numerice) şi pentru care se doreşte calcularea de statistici. Fără
declaraţia VAR, procedura MEANS calculează statistici pentru fiecare variabilă numerică din
setul de date.
Declaraţia INFILE indică sursa de provenienţă a datelor, în exemplul din figura IV.6.4. aceasta
este discul E, directorul date sas, fişierul comenzi.txt.
Declaraţia INPUT este una dintre cele patru metode diferite utilizate de SAS pentru citirea
rândurilor de date. Programul din figura IV.6.4. utilizează metoda “list input” adecvată pentru
valorile de date separate prin delimitatori. În SAS delimitatorul implicit este caracterul spaţiu.
SAS poate, de asemenea, să citească date separate prin alţi delimitatori (de exemplu “ sau tab) cu
modificări minore în declaraţia INFILE.
Când se utilizează pentru citirea datelor metoda “list input”, programatorul va trebui numai să
introducă numele pe care doreşte să îl atribuie fiecărei valori de dată. Aceste nume se numesc
nume de variabile şi trebuie să respecte regulile de sintaxă ale acestora.
Este de remarcat faptul că semnul $ care urmează după numele de variabilă Nr_Comandă
specifică faptul că valorile acestei variabile sunt de tip caracter. Dacă nu există semnul $,
motorul SAS presupune că valorile sunt numere şi vor fi stocate ca valori numerice SAS.
Secţiunile DATA sau PROC se termină de obicei cu declaraţia RUN, dar pentru anumite
platforme aceasta poate să lipsească, o secţiune considerându-se că se termină acolo unde începe o
altă secţiune DATA sau PROC.

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;
run;
proc means
data= date.comenzi;
title 'Analiza comenzi‘; var Pret; run;

Figura IV.6.4. Exemplu de cod SAS

În exemplul din figura IV.6.4., textul care urmează declaraţiei TITLE, plasat între ghilimele
simple sau duble, va fi afişat la începutul fiecărei pagini de rezultate SAS. După cum s-a precizat
mai sus, 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.

IV.6.2. Vizualizarea codului


În cadrul unui proiect SAS, pot fi vizualizate toate elementele codului, dar pot fi editate numai
nodurile de cod (“Code Node”) care conţin cod SAS, realizând dublu-clic pe acestea.
Un nod de cod poate include următoarele elemente:
 copia codului generat de o prelucrare aferentă unei opţiuni SAS din proiect;
 un program SAS creat şi salvat anterior;
 un cod creat de către utilizator.
În cadrul unui proiect, un nod de cod vid poate fi inserat selectând din meniul bară opţiunile File
 New  Code.
Pentru a vizualiza codul generat de o prelucrare, se realizează clic drepta pe numele prelucrării din
fereastra arborelui proiectului sau a fluxului de proces, şi se selectează opţiunea Open  Open
Last Submitted Code (figura IV.6.5).

Figura IV.6.5. Vizualizarea codului generat de o prelucrare


Implicit, se poate vizualiza codul generat de o prelucrare SAS, aşa cum arată şi figura IV.6.6, în
care este prezentat codul asociat unei prelucări de tipul List Data.

Figura IV.6.6. Vizualizarea codului generat de o prelucare

După cum se poate observa în figură, PROC PRINT reprezintă numele unei secţiuni de cod în
cadrul căreia există 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ă etichetele variabilelor;
 declaraţia VAR - corespunde rolului List Variables şi indică numele variabilelor utilizate în
procedură;
 declaraţia BY - corespunde rolului Group Table By indicând numele variabilei de grupare;
 declaraţia RUN - încheie secţiunea PROC PRINT.
Pentru a vizualiza întreg codul necesar generării unei prelucrări de ieşire se vor selecta opţiunile
Tools  Options  Task General  Display all generated SAS code in task output
(figura IV.6.7).
Figura IV.6.7. Codul integral generat de o prelucrare

În figura IV.6.8 este prezentat un exemplu de cod detaliat pentru generarea rezultatelor în format
HTML, RTF sau SAS.
Figura IV.6.8. Fragment din codul detaliat generat de o prelucrare

IV.6.3. Editarea codului SAS

În cadrul unui proiect, utilizatorul poate realizeze următoarele activităţi:

 să insereze cod, în mod automat, înainte sau după execuţia unei prelucrări sau a unui
program;
 să editeze codul oricărui program creat prin intermediul unei prelucrări sau a instrumentelor
Import Wizard sau Query Builder;
 să insereze programe SAS deja existente, ca noduri de cod, în cadrul unui proiect;
 să exporte codul unei prelucrări sau chiar a unui întreg proiect către un fişier;
 să creeze cod de la zero într-un nod de cod.

Codul SAS asociat unei prelucrări este read-only, drept urmare el nu poate fi modificat.
Încercarea de a realiza acest lucru generează apariţia mesajului din figura IV.6.9 prin care
utilizatorul este întrebat dacă doreşte să creeze o copie modificabilă a codului respectiv.

Figura IV.6.9. Mesaj de avertizare privind modificarea codului SAS

Dacă răspunsul va fi afirmativ, codul va fi copiat într-un nod de cod posibil de modificat (figura
IV.6.10).
Figura III.6.10. Crearea unei copii a codului generat de o prelucrare

Noul nod de cod nu este asociat cu prelucrarea iniţială, drept urmare modificările realizate în
acesta, precum şi cele efectuate în cadrul prelucrării originale (prin intermediul ferestrei de dialog)
nu se vor influenţa reciproc.
Noul cod creat va putea fi executat pe server-ul local sau pe oricare server disponibil. Rezultatele
şi log-ul aferente noului nod de cod vor fi incluse în arborele proiectului, vizibil în fereastra
Project Explorer.

IV.6.4. Personalizarea codului unei prelucrări

În cadrul ferestrelor de dialog ale unei prelucrări SAS, se poate selecta butonul Preview code
pentru a previzualiza codul generat de aceasta (figura IV.6.11) şi fereastra de previzualizare
pentru a insera un nou cod în cel deja existent (figura IV.6.12).

Figura IV.6.11. Previzualizarea codului SAS


Figura IV.6.12. Fereastra pentru inserarea de cod SAS

Inserarea automată de cod se poate aplica numai prelucrărilor şi interogărilor. Utilizatorul poate
seta opţiuni similare pentru a insera automat cod personalizat, înainte sau după codul scris prin
intermediul editorului de cod, prin selectarea opţiunii SAS Programs (Tools  Options 
Custom Code) precum în figura IV.6.13.

Figura IV.6.13. Opţiunile de inserarea a codului

Presupunem că se doreşte realizarea unei proceduri pentru testarea prelucrărilor care să


folosească un subset mic de date, înainte de a rula prelucrarea pe toate datele reale. În acest sens,
se va folosi declaraţia OPTIONS care permite utilizatorului să controleze multe aspecte ale unei
sesiuni de lucru SAS Enterprise Guide, cum ar fi destinaţia rezultatelor sau eficienţa execuţiei
unui program. Schimbarea unei opţiuni prin inserarea de cod va avea efect pe toată durata unei
sesiuni SAS Enterprise Guide.
De aceea, se recomandă resetarea opţiunilor şi revenirea la cele implicite prin inserarea de cod şi
după execuţia programului.
În exemplul din figura IV.6.14. au fost inserate opţiunile FIRSTOBS= şi OBS= înaintea
fiecărei prelucrări pentru a citi numai observaţiile de la 1 la 15 din fiecare tabelă.

Figura IV.6.14. Inserarea unui cod înainte de codul de executat


Criterii de alegere a produselor software şi evaluarea performanţelor
acestora

Alegerea unui pachet software de aplicaţie potrivit pentru o companie este o activitate laborioasă
care presupune atât cunoaşterea procesului de selecţie a produselor software cât şi a criteriilor de
calitate a acestora.
Procesul de selecţie a pachetelor software poate respecta următoarele etape:
1. Stabilirea necesităţii de achiziţionare a pachetului software şi identificarea pachetelor software
potenţial candidate.
2. Eliminarea pachetelor software care nu au caracteristicile cerute sau care nu pot funcţiona pe
/ împreună cu echipamentele hardware, sistemul de operare şi sistemul de gestiune a bazelor
de date dorite de beneficiar.
3. Utilizarea de tehnici de evaluare pentru a evalua pachetele rămase şi pentru a obţine un
punctaj sau o clasificare generală a acestora.
4. Realizarea unei analize mai detaliate prin utilizarea unei versiuni de probă a pachetelor
software aflate pe primele poziţii şi efectuarea unei evaluări empirice. Pachetul trebuie testat
într-un mediu adecvat.
5. Negocierea unui contract prin specificarea preţului pachetului, numărului licenţelor software
oferite, a planului de plăţi, funcţionalităţile specifice, responsabilităţile privind instalarea,
reparaţiile şi mentenanţa, planul de livrare şi instalare a produselor şi alte aspecte legale.
6. Cumpărarea şi implementarea celui mai potrivit pachet software.

Calitatea produselor software poate fi privită din punctede vedere al producătorului sau al
utilizatorului. În continuare sunt prezentate câteva criterii de calitate a produselor software din
punct de vedere al utilizatorului, respectiv criterii de alegere a produselor software. Aceste
criterii ţin de caracteristicile funcţionale ale pachetului de programe, de caracteristicile de calitate
software, de vânzătorul (după caz producătorul sau distribuitorul) produsului, de costurile de
achiziţie şi implementare şi respectiv beneficiile aduse de utilizarea produsului software, de
configuraţia hardware şi software necesară utilizării noului produs, respectiv existentă la
utilizator

Tabelul I.1. prezintă câteva criterii legate de caracteristicile funcţionale ale pachetelor
software.
Tabelul I.1.
Criteriu Descriere
Funcţionalitatea inclusă Tipuri de funcţionalităţi sau funcţii ale activităţii beneficiarului pe care pachetul
trebuie să le ofere. Descrie modul în care pachetul software acoperă fiecare funcţie
Obiectiv principal Domeniu sau domeniile spre care software-ul este orientat
Completitudine Gradul în care software-ul îndeplineşte cerinţele funcţionale
Adaptabilitate Posibilităţile de personalizare şi adaptare la cerinţele specifice ale beneficiarului
Deschidere Posibilităţile de dezvoltare ulterioară (internă şi externă)
Interoperabilitate Capacitatea de a se integra cu alte instrumente şi produse software
Niveluri de securitate Politicile de securitate suportate de pachetul software (de identificare a
utilizatorului, de audit, criptarea de date etc.)
Utilizare simultană Numărul de utilizatori care se pot conecta simultan la produs şi îl pot folosi
Parametrizare completă Parametrii algoritmului folosit să fie sub controlul utilizatorului
Dimensiunea problemei Dimensiunea maximă a problemei ce trebuie rezolvată în raport cu dimensiunea
maximă a problemei care este acceptată de produsul program

Clasele de criterii şi criterii legate de caracteristicile de calitate software sunt prezentate în


tabelul I.2.
Tabelul I.2.
Clasă criterii Criteriu Descriere
Câmpuri Posibilitatea de a personaliza anumite elemente ale interfeţei
personalizabile
Personalizare
Rapoarte Posibilitatea de a personaliza anumite elemente ale rapoartelor generate de
personalizabile pachet
Mulţimea sistemelor de gestionare a bazelor de date care pot fi accesate de
Standarde SGBD
un pachet software (SQL Server, Oracle Database, Sybase etc.)
Standarde de Standardele inter-organizaţionale de transfer de date care sunt acceptate de
Portabilitate
comunicaţie un pachet software (EDI, XML)
Varietatea Capacitatea pachetului de programe de a funcţiona pe o mare varietate de
platformelor platforme de calculator (hardware şi software)
Abilitatea pachetului software de a suporta creşterea numărului de
Mentenabilitate Scalabilitate
utilizatori şi a numărului de tranzacţii
Interfaţa utilizator Uşurinţa cu care utilizatorul poate utiliza interfaţa pachetului software
Posibilitatea ca pachetul software să fie utilizat cu uşurinţă de diverse tipuri de
Tipuri de
utilizatori: începători, intermediari, avansaţi sau de o combinaţie de tipuri de
utilizatori
utilizatori
Vizualizarea Măsura în care pachetul software poate prezenta datele în mod eficient
datelor
Pachetul software trebuie să pună în evidenţă erorile existente (de operare,
Utilizabilitate Raportarea de sistem sau de algoritmi), să sesizeze apariția erorii, sa atenționeze
erorilor utilizatorul de apariția ei, stabilească locul apariției, cauza şi modalităţile de
eliminare a erorilor
Varietatea Posibilitatea de a utiliza produsul software în diferite domenii de activitate,
domeniului de în scopul rezolvării a diferite tipuri de probleme
utilizare
Uşurinţa în Uşurinţa cu care utilizatorul poate învăţa să utilizeze un pachet de programe
utilizare
Existenţa Existenţa unui manual de utilizare care să conţină informaţiile necesare
manualului de instalării şi utilizării pachetului software
utilizare
Existenţa tutorial- Existenţa unui tutorial pentru faciltarea învăţării modului de utilizare a
ului pachetului software
Instruire Existenţa cursurilor de formare sau de perfecţionare în utilizarea pachetul
software
Versiuni Disponibilitatea unor versiuni demonstrative sau de încercare gratuite ale
demonstrative produsului software
Gradul în care pachetul software poate funcţiona, în mod constant, fără
Robusteţe
erori
Fiabilitate Corectitudine Măsura în care produsul software respectă specificaţiile de realizare
Salvare şi Măsura în care pachetul software oferă facilităţi de salvare şi recuperare a
recuperare datelor şi rezultatelor
Măsura în care pachetul software oferă rezultate într-un interval de timp
Viteza de execuţie
rezonabil, în raport cu dimensiunea datelor şi complexitatea algoritmilor
Eficienţă
Calitatea Calitatea algoritmilor utilizaţi influenţează calitatea rezultatelor, viteza de
algoritmilor execuţie, consumul de resurse

Tabelul I.3. prezintă criterii legate de vânzător/distribuitor


Tabelul I.3.
Criteriu Descriere
Mentenanţă şi actualizare Sprijinul oferit de către producător / distribuitor pentru mentenanţa şi
actualizarea pachetului software
Consultanţă Disponibilitatea producătorului / distribuitorului de a oferi suport
tehnic şi consultanţă
Timpul de răspuns Nivelul serviciilor oferite de către producător / vânzător
Experienţă Experienţa producătorului / vânzătorului cu privire la dezvoltarea
produselor software
Popularitate Popularitatea producătorului / distribuitorului pe piaţa de profil
Abilităţi tehnice şi de afaceri Abilităţile tehnice şi de afaceri ale producătorului / distribuitorului
Experienţa anterioară Dacă există, experienţa profesională anterioară în relaţia cu
distribuitorul
Referinţe Referinţe ale clienţilor existenţi care folosesc produsul

Criterii legate de costuri şi beneficii (tabelul I.4.)


Tabelul I.4.
Criteriu Descriere
Costul licenţelor Costul licenţelor produsului din punct de vedere al numărului de utilizatori
Costurile de instruire Costurile de instruire ale utilizatorilor care vor folosi produsul
Costuri de instalare şi Costuri legate de instalarea şi implementarea pachetului software
implementare
Costuri de mentenanţă Costuri legate de mentenanţa produsului software
Costuri de actualizare Costuri de actualizare a produsului atunci când o nouă versiune va fi lansată
Costuri hardware Costul maşinilor folosite pentru a sprijini sistemul, inclusiv procesoare,
memorie şi terminale
Beneficii directe Economii tangibile în muncă şi echipamente, reducerea costului pe unitatea
de procesare şi eliminarea costurilor privind serviciile externalizate

Criterii legate de hardware şi software (tabelul I.5)


Tabelul I.5.
Criteriu Descriere
Memorie internă Memoria internă necesară pentru rularea produsului
Spaţiu extern de Spaţiu de stocare sub formă de spaţiu pe disc sau alte facilităţi
stocare de stocare
Cod sursă Disponibilitatea codului sursă
Platformă hardware Platforma hardware necesară pentru a rula software-ul
Tehnologia de reţea Tehnologia de reţea necesară pentru a rula pachetul de
programe, de exemplu LAN, WAN,

Criteriile de alegere sunt strâns legate de caracteristicile de calitate, asigurate în toate etapele de
elaborare a produsului program. Din punct de vedere al produselor software, se poate vorbi de
calitatea la elaborator şi calitatea la beneficiar sau de calitatea procesului de realizare şi calitatea
produsului final.
Calitatea produselor software reprezintă totalitatea însuşirilor tehnice, economice şi sociale ale
acestora. Ea reprezintă ansamblul însuşirilor ce exprimă gradul în care acestea satisfac nevoia
utilizatorilor, în funcţie de parametrii tehnico-economici, de gradul de utilitate şi de eficienţă
economică în exploatare.
Calitatea produselor software poate fi exprimată prin: calitatea de concepţie şi proiectare
(măsura în care proiectul produsului program asigură satisfacerea cerinţelor utilizatorilor),
calitatea de execuţie (măsura în care procesul de elaborare se desfăşoară conform fluxurilor
stabilite, cu utilizarea resurselor adecvate), calitatea de conformitate (gradul de concordanţă
dintre însuşirile reale ale produsului program şi cele prezentate în documentaţia finală),
capacitatea de utilizare (comportamentul produsului program în rezolvarea curenta a
problemelor aparţinând clasei pentru care a fost elaborat) şi capacitatea de mentenanţă (măsura
în care pot fi eliminate anomaliile ce apar în timpul execuţiei sau pot fi puse de acord noi cerinţe
de prelucrare cu efortul pentru implementare).
Însuşirile calitative ale produselor program se creează în procesul de elaborare, dar se manifestă
în procesul de utilizare. Calitatea procesului de elaborare reflectă modul de realizare, laturile
activităţii de concepţie tehnologică, măsurile organizatorice din unităţile de informatică si oferă
garanţia realizării de produse program performante.
Calitatea produsului program este expresia finală a procesului de realizare, sintetizând nivelul
tehnic, funcţional şi economic, caracteristic fiecărui program; calitatea fiind o noţiune complexă
şi dinamică, întrucât conţinutul produsului program evoluează în timp - în funcţie de cerinţele
practice ale utilizatorilor - atât extensiv, prin modificarea numărului de funcţii de prelucrare, cât
si intensiv, prin îmbunătăţirea performanţelor acestuia.
Utilizatorul este cel care verifică calitatea unui produs program, având drept criteriu satisfacerea
cerinţelor sale. Producătorii de produse software trebuie să obţină, cel puţin, acel nivel al calităţii
care să permită satisfacerea aşteptărilor utilizatorului. Un nivel mai scăzut, duce la alegerea
produselor software concurente, care la acelaşi preţ oferă nivelul necesar al calităţii. Pe de altă
parte, un nivel mult mai ridicat al calităţii antrenează costuri foarte mari, care se reflectă în preţul
produsului. În acest caz, utilizatorul alege acele produse concurente care la un preţ mai scăzut,
oferă un nivel suficient al calităţii. Este necesară, deci, utilizarea unor metode de evaluare a
calităţii software, astfel încât să existe posibilitatea comparării nivelului planificat al calităţii cu
cel obţinut efectiv.
Aspecte legislative privind protecţia produselor software
şi licenţe software
1. Aspecte legislative privind protecţia produselor software

Protecţia produselor program a fost reglementată prin Legea 8/1996 - Legea privind dreptul
de autor şi drepturile conexe. Aceasta a fost modificată şi completată prin Legea nr.
146/1997, Legea nr. 285/2004, Ordonanţa de Urgenţă a Guvernului nr. 123 / 2005,
Ordonanţa de Urgenţă a Guvernului nr. 190/2005, Legea nr. 202/2010, Legea nr. 71/2011,
Ordonanţa de Urgenţă a Guvernului nr. 71/2011, Legea nr. 187/2012, Legea nr. 76/2012,
Legea nr. 255/2013, Legea nr. 53/2015 şi Legea nr. 210/2015. Această lege defineşte
obiectul şi conţinutul dreptului de autor, având o serie de dispoziţii speciale referitoare la
produsele software. În continuare vor fi prezentate câteva aspecte generale ale legii şi
aspectele specifice, referitoare la produsele software. Astfel, obiectul dreptului de autor
îl reprezintă operele originale de creaţie intelectuală, indiferent de modalitatea de creaţie,
modul şi forma concretă de exprimare şi independent de valoarea şi destinaţia lor. Prin
contractul de închiriere autorul permite folosirea pe un timp determinat a originalului
sau a copiilor.
Dispoziţii speciale privind programele pentru calculator
Art.30. Drepturile patrimoniale asupra programelor pentru calculator durează tot timpul
vieţii autorului, iar după moartea acestuia se transmit prin moştenire, potrivit legislaţiei
civile, pe o perioada de 70 de ani.
Art.72. (1) Prin prezenta lege, protecţia programelor pentru calculator include orice
expresie a unui program, programele de aplicaţie şi sistemele de operare, exprimate în
orice fel de limbaj, fie în cod-sursa sau cod-obiect, materialul de concepţie pregătitor,
precum şi manualele. (2) Ideile, procedeele, metodele de funcţionare, conceptele
matematice şi principiile care stau la baza oricărui element dintr-un program pentru
calculator, inclusiv acelea care stau la baza interfeţelor sale, nu sunt protejate.
Art. 73. (1) Titularul dreptului de autor al unui program pentru calculator beneficiază în
mod corespunzător de drepturile prevăzute de prezenta lege, îndeosebi de dreptul exclusiv
de a realiza şi de a autoriza: a) reproducerea permanentă sau temporară a unui program,
integral sau parţial, prin orice mijloc şi sub orice formă, inclusiv în cazul în care
reproducerea este determinată de instalarea, stocarea, rularea sau executarea, afişarea sau
transmiterea în reţea; b) traducerea, adaptarea, aranjarea şi orice alte transformări aduse
unui program pentru calculator, precum şi reproducerea rezultatului acestor operaţiuni, fără
a prejudicia drepturile persoanei care transformă programul pentru calculator; c)
distribuirea şi închirierea originalului sau a copiilor unui program pentru calculator sub
orice formă. (2) Prima vânzare a unei copii a unui program pentru calculator pe piaţa
internă de către titularul drepturilor sau cu consimţământul acestuia epuizează dreptul
exclusiv de autorizare a distribuirii acestei copii pe piaţa internă.
Art. 74. În lipsa unei clauze contrare, drepturile patrimoniale de autor asupra
programelor pentru calculator, create de unul sau de mai mulţi angajaţi în exercitarea
atribuţiilor de serviciu ori după instrucţiunile celui care angajează, aparţin acestuia din
urma.
Art. 75. (1) În lipsa unei clauze contrare, printr-un contract de utilizare a unui program
pentru calculator se prezumă că: a) utilizatorului i se acordă dreptul neexclusiv de
utilizare a programului pentru calculator; b) utilizatorul nu poate transmite unei alte
persoane dreptul de utilizare a programului pentru calculator. (2) Cesiunea dreptului de
utilizare a unui program pentru calculator nu implică şi transferul dreptului de autor
asupra acestuia.
Art. 76. În lipsa unei clauze contrare, nu sunt supuse autorizării titularului dreptului de
autor actele prevăzute la art. 73 lit. a) şi b), daca acestea sunt necesare pentru a permite
dobânditorului legitim să utilizeze programul pentru calculator într-un mod corespunzător
destinaţiei sale, inclusiv pentru corectarea erorilor.
Art. 77. (1) Utilizatorul autorizat al unui program pentru calculator poate face, fără
autorizarea titularului dreptului de autor, o copie de arhivă sau de siguranţă, în măsura în
care aceasta este necesară pentru asigurarea utilizării programului. (2) Utilizatorul
autorizat al copiei unui program pentru calculator poate, fără autorizarea titularului
dreptului de autor, să analizeze, să studieze sau să testeze funcţionarea acestui program,
în scopul de a determina ideile şi principiile care stau la baza oricărui element al acestuia,
cu ocazia efectuării oricăror operaţiuni de instalare, afişare, rulare sau executare,
transmitere ori stocare a programului, operaţiuni pe care este în drept să le efectueze.
Art. 78. Autorizarea titularului dreptului de autor nu este obligatorie atunci când
reproducerea codului sau traducerea formei acestui cod este indispensabilă pentru
obţinerea informaţiilor necesare interoperabilităţii unui program pentru calculator cu alte
programe pentru calculator, dacă sunt îndeplinite următoarele condiţii: a) actele de
reproducere şi de traducere sunt îndeplinite de o persoana care deţine dreptul de utilizare
a unei copii a programului sau de o persoana care îndeplineşte aceste acţiuni în numele
celei dintâi, fiind abilitată în acest scop; b) informaţiile necesare interoperabilităţii nu
sunt uşor şi rapid accesibile persoanelor prevăzute la lit. a) a prezentului articol; c) actele
prevăzute la lit. a) a prezentului articol sunt limitate la părţile de program necesare
interoperabilităţii.
Art. 79. Informaţiile obţinute prin aplicarea art. 78: a) nu pot fi utilizate în alte scopuri
decât realizarea interoperabilităţii programului pentru calculator, creat independent; b) nu
pot fi comunicate altor persoane, în afara cazului în care comunicarea se dovedeşte
necesară interoperabilităţii programului pentru calculator, creat independent; c) nu pot fi
utilizate pentru definitivarea, producerea ori comercializarea unui program pentru
calculator, a cărui expresie este fundamental similară, sau pentru orice alt act ce aduce
atingere drepturilor autorului.
Art. 80. Dispoziţiile art. 78 şi 79 nu se aplică, daca se cauzează un prejudiciu titularului
dreptului de autor sau utilizării normale a programului pentru calculator.
Art. 81. Dispoziţiile privind conţinutul dreptului de autor nu se aplică programelor
pentru calculator.
Beneficiază de protecţie prin lege şi programele create anterior intrării în vigoare a
acestei legi

2. Licenţe software

Legislaţia română, prin intermediu Art. 2 din O.G. nr. 124/2000, defineşte licenţa ca:
"Licenţa programului pentru calculator - acordul scris al titularului dreptului de autor
asupra unui program pentru calculator pentru cesiunea unor drepturi către utilizatorul
programului şi care însoţeşte programul". Licenţa software este un instrument juridic cu
titlu de drept contractual, prin care titularul dreptului de autor autorizează (contra plată
sau gratuit) utilizarea produsul software în scopuri comerciale, educaţionale sau
personale, de către unul sau mai mulţi utilizatori.
Deşi o licenţă software poate lua forma unui angajament scris, de cele mai multe ori ea
este inclusă în software-ul însuşi, ca parte a procesului de instalare. Dacă utilizatorul nu
este de acord cu termenii licenţei software, poate anula procesul de instalare.
Conform Art. 2 din O.G. nr. 124/2000, (1) Agenţii economici care produc, distribuie,
comercializează sau închiriază programe pentru calculator pe teritoriul României vor
comunica Oficiului Roman pentru Drepturile de Autor următoarele: a) acordul titularului
dreptului de autor sau al producătorului, după caz, pentru activităţile de distribuire,
comercializare sau închiriere; b) informaţii referitoare la modul de acordare a licenţei şi
după caz, modelul licenţei acordate, pe teritoriul României, utilizatorilor de programe
pentru calculator. (2) Pot fi comunicate şi informaţii referitoare la modul de acordare a
licenţei şi, după caz, modelul licenţei acordate, pe teritoriul altor state, utilizatorilor de
programe pentru calculator.
Licenţele software reprezintă de fapt consimţământul pe care titularul dreptului de autor îl
dă unei persoane pentru a putea reproduce, folosi, difuza sau importa copii ale unui
program de calculator. Ele sunt documentele care probează că reproducerea, folosirea,
difuzarea etc. unui program de calculator de către o anumita persoană s-a realizat cu
consimţământul autorului. Pentru a dovedi că persoana în cauza este cea care a obţinut
licenţele respective, ea trebuie sa probeze acest lucru cu facturi de cumpărare sau cu alte
documente de provenienţa. Lipsa licenţelor echivalează cu lipsa autorizării din partea
autorului. Importanţa acestor licenţe este evidentă, întrucât desfăşurarea activităţilor
menţionate fără aceste licenţe, reprezintă infracţiuni. Tipul de licenţă necesar este
determinat de scopul utilizării produsului soft.
Produsele software pot fi în distribuţie liberă (utilizarea lor este gratuită iar codul sursă
poate fi sau nu disponibil) sau în distribuţie comercială (este supus legii protecţiei
dreptului de autor, prin care titularul dreptului de autor impune preţul şi condiţiile de
utilizare).
Produse software comerciale pot beneficia de licenţe comerciale cu drepturi depline
permit utilizarea aplicaţiilor în orice mod legal, inclusiv pentru obţinerea unor beneficii
materiale, au valabilitate limitată sau nelimitată în timp şi sunt contra cost, licenţe gratuite
de probă, care oferă un termen de utilizare limitat; funcţionalitate limitată sau un număr
limitat de lansări în execuţie, licenţe educaţionale presupun utilizarea aplicaţiilor în
procesului educaţional, nu permit utilizarea pentru obţinerea unor beneficii materiale ,
perioada lor de valabilitate poate fi limitată sau nelimitată în timp şi de obicei pot fi
achiziţionate cu un cost redus;
Produse software freeware (cu distribuţie liberă) sunt acele programe care au drepturi de
autor înregistrate şi sunt accesibile pentru a fi utilizate gratuit, pentru o perioadă nelimitată
de timp. Unicul criteriu pe care trebuie să-l posede un program pentru a fi clasificat ca
„freeware” este accesibilitatea gratuită pentru o perioadă nelimitată de timp. Licenţe
freeware sunt gratuite, dar de obicei se impun una sau mai multe restricţii de utilizare:
personală, ne-comercială, academică, comercială sau alte combinaţii dintre ele. De
exemplu, licenţa poate fi „gratuită pentru utilizare personală, ne-comercială”. Unele
programe pot fi considerate freeware, dar au o limită de distribuire, adică ele pot fi
descărcate de pe un anumit site, dar nu pot fi redistribuite.
În funcţie de numărul de utilizatori pot exista licenţe individuale - prin care se acordă
dreptul ca aplicaţia software să fie instalată pe un singur calculator fără posibilitatea de a
fi accesata de către alţi utilizatori prin intermediul reţelei şi licenţe multi-utilizator - prin
care se acordă dreptul ca aplicaţia software să fie instalată pe mai multe calculatoare şi să
fie utilizată de mai mulţi prin intermediul reţelei de calculatoare.
În funcţie de perioada de valabilitate a licenţei pot exista licenţe pe perioade
nedeterminate de timp sau licenţe de tip abonament - prin care licenţa este limitată la o
perioadă de timp.
În funcţie de drepturile asupra produsului software acesta poate fi:
 Free and Open-Source Software (Software Liber şi cu sursă deschisă). Free
Software - este un tip de software care poate fi studiat, modificat, îmbunătăţit şi
distribuit fără restricţii. În general, el este disponibil gratis dar gratuitatea nu este
absolut necesară. Pentru a putea fi considerat software liber, codul sursă al
programului trebuie să fie distribuit împreună cu o notă de copyright (licenţă
software) care să descrie şi să permită patru tipuri de libertăţi, şi anume: (1) de a
utiliza programul în orice scop; (2) de a studia modul de funcţionare a programului şi
de a-l adapta nevoilor proprii; (3) de a redistribui copii, în scopul ajutorării
aproapelui, gratuit sau contra unei sume de bani care să acopere costurile de
desfacere; (4) de a îmbunătăţi programul şi de a pune îmbunătăţirile la dispoziţia
publicului, în folosul întregii societăţi. Un program este un Software Liber dacă
întruneşte toate aceste libertăţi. Accesul la codul sursă al programului este o
precondiţie pentru libertăţile 2 şi 3, dar nu tot software-ul ale cărui surse sunt publice
este Software Liber. De asemenea, deşi majoritatea Software-ului Liber este şi
gratuit, costul nu este un criteriu după care se poate spune că un program este
liber sau nu, astfel că programele Freeware nu sunt Software Liber. De obicei
licenţele de Software Liber sunt create în aşa fel încât aceste libertăţi să nu poată fi
restrânse odată cu redistribuirea programului, dar există şi licenţe mai permisive care
permit chiar şi înglobarea unor părţi ale programelor libere în software proprietar.
Programele aflate în domeniul public sunt considerate şi ele software liber dacă
sursa programului este disponibilă. Free Software (Software Liber) se diferenţiază
de Freeware prin sensul cuvântului „free”. Freeware înseamnă gratis, iar Free
Software – libertate pentru studiere, modificare, copiere, redistribuire şi utilizare în
orice scop, nu neapărat gratuit. Oricum, multe programe pot fi în acelaşi timp şi
freeware şi free software. Software-ul liber, care poate fi distribuit gratuit sau contra
cost, nu trebuie confundat cu programele freeware, acestea din urmă nepermiţând
activităţile de inginerie inversă, modificarea şi, în unele cazuri, redistribuirea liberă.
Software-ul liber nu trebuie confundat nici cu software-ul cu sursă deschisă (open-
source software) care se referă strict la faptul că sursa programului este disponibilă.
Există trei categori de software liber:
 Software-ul pentru domeniul public (Public domain software) - nu dispune de
protecţia drepturilor de autor pentru care: dreptul de autor a expirat, lucrarea nu a
fost protejată prin drepturi de autor, sau autorul a lansat software-ul pe domeniul
public printr-o declaraţie de renunţare (în ţările în care acest lucru este posibil).
 Licenţe permisive (Permissive licenses) sunt cunoscute şi ca licenţe free
copyfree, deoarece nu au restricţii asupra distribuţiei. Autorul păstrează dreptul
de autor exclusiv pentru a nu oferi garanţie, necesită specificarea, pentru
produsului modificat, a autorului, permite redistribuirea şi orice modificare, chiar
şi cele cu sursă închisă. În acest sens, o licenţă permisivă oferă un stimulent
pentru a crea software non-liber, prin reducerea costurilor de dezvoltare a
software-ului restricţionat. Deoarece acest lucru este incompatibil cu spiritul
libertăţii software-ului, mulţi oameni consideră licenţele permisive ca fiind mai
puţin libere decât licenţele de copyleft.
 Licentele Copyleft - autorul pastrează drepturile de autor şi permite redistribuirea
cu restricţia ca toate redistribuirile să fie licentiate sub aceeaşi licenţă. Adăugările
şi modificările făcute asupra produsului, trebuie de asemenea să fie licenţiate sub
aceeaşi licenţă "copyleft" ori de câte ori acestea sunt distribuite cu o parte din
produsul original licenţiat. Din cauza restricţiei de distribuţie, nu toată lumea
consideră că acest tip de licenţă este liberă.
Licenţele pentru produsele software şi drepturile acordate de aceste licenţe pot fi
vizualizate în tabelul I.6.

Tabelul I.6. Drepturile acordate de licenţele software


(conform Mark Webbink)
Free and Open Source Software

Public
domain Permissive Copyleft Freeware / Proprietary
Software licenses licenses Shareware license
Drept de autor
păstrat Nu Da Da Da Da
Drept de a folosi Da Da Da Da Da
Drept de
prezentare Da Da Da Da Da
Drept de copiere Da Da Da De obicei Nu
Drept de
modificare Da Da Da Nu Nu
Da – sub Da – sub
Drept de anumite anumite
distribuire Da licenţe licenţe De obicei Nu
Drept de
sublicenţiare Da Da Da Nu Nu

Produsele software libere se distribuie în baza licenţelor CCL (Creative Commons


Licence) - licenţe, care permită păstrarea şi propagarea dreptului de autor pentru
produsele (resursele) elaborate în procesul copierii, modificării şi redistribuirii
acestora.
O licenţă Creative Commons (CC) este un tip de licenţă publică pentru drepturi de
autor care permite distribuirea gratuită a unei lucrări protejate prin drepturi de autor.
Ea poate fi utilizată atunci când un autor doreşte să ofere dea oamenilor dreptul de a
distribui, utiliza şi dezvolta o lucrare pe care au creat-o. CC oferă flexibilitate
autorului (de exemplu, ar putea alege să permită doar utilizarea necomercială) şi
protejează persoanele care utilizează sau redistribuie lucrarea din punct de vedere al
încălcării drepturilor de autor, atât timp cât sunt respectare condiţiile specificate în
licenţa prin care autorul distribuie lucrarea.
Tipurile principale a licenţelor CCL sunt prezentate în figura I.1:

Pictogramă Drepturi Descriere


Attribution Titularii acestui tip de licenţă pot utiliza, copia, distribui şi dezvolta
(BY) produsul numai dacă acordă autorului sau licenţiatorului creditele
(atribuirea) în maniera specificată de acesta. Atribuirea, în legea
dreptului de autor este o recunoaştere ca fiind creditul deţinătorului
drepturilor de autor sau autorului unei opere. Dacă atribuirea este
solicitată de o licenţă, aceasta îi împiedică în mod legal pe alţii să
revendice să deţină operele şi permite unui deţinător de drepturi de
autor să acumuleze o reputaţie.

Share-alike Titularii acestui tip de licenţă pot distribui lucrări derivate numai cu
(SA) o licenţă identică ("nu mai restrictivă") cu licenţa care reglementează
lucrarea iniţială. Fără termenul de “Share-alike”, lucrările derivate ar
putea fi sublicenţiate cu clauze de licenţă compatibile, dar mai
restrictive, de ex. CC BY sau CC BY-NC.)

Non- Titularii acestui tip de licenţă pot copia, distribui, utiliza şi modifica
commercial produsul numai în scopuri necomerciale.
(NC)

No Titularii acestui tip de licenţă pot utiliza, copia şi distribui produsul


Derivative dar nu îl pot modifica
Works (ND)

Figura I.1. Semnificaţia siglelor CCL.


Sursa http://creativecommons.org/about/licenses

Ultimele două tipuri nu sunt licenţe de conţinut liber (free content licenses), conform
unor definiţii precum standardele DFSG (Debian Free Software Guidelines) sau ale
Fundaţiei pentru Software Liber (Free Software Foundation), şi nu pot fi folosite în
contexte care necesită aceste libertăţi. Licenţele CCL utilizate regulat sunt prezentate în
figura I.2.
Pictogramă Acronim Pictogramă Acronim
CC0 BY-ND

BY BY-NC-SA

BY-SA BY-NC-ND

BY-NC

Figura I.1. Tipuri de licenţe CCL Sursa http://creativecommons.org/about/licenses


Pentru software, Creative Commons include trei licenţe gratuite create de alte
instituţii: licenţa BSD, GNU LGPL şi GNU GPL.
Licenţele BSD sunt o familie de licenţe pentru software liber şi face parte din
categoria licenţelor permisive. Licenţa permite utilizarea programului fără niciun fel
de restricţii. Redistribuţia programului (cod sursă sau compilat) se poate face cu
condiţia păstrării informaţiei despre autor şi a licenţei în codul sursă sau, după caz, în
documentaţia programului. A treia condiţie este aceea de a a nu folosi numele
deţinătorilor drepturilor de autor (sau a contribuitorilor) pentru gira, susţine sau
promova produse derivate, fără acordul autorilor.
Licenţa GNU GPL (GNU General Public License, prescurtat GNU GPL) este o
licenţă care dă dreptul oricărui utilizator de a copia, modifica şi redistribui programe
şi coduri sursă. Licenţa GPL este cea mai cunoscută şi utilizată licenţă de tip
”copyleft”, care impune ca în cazul distribuţiei creaţiilor derivate, acestea să fie
licenţiate sub aceeaşi licenţă copyleft. Conform acestei filozofii, GNU GPL acordă
acelaşi drepturi acordate de definiţia software-ului liber, dar foloseşte copyleft pentru
a asigura păstrarea acestor drepturi, chiar dacă creaţia originală a fost modificată.
Livenţa GNU LGPL (GNU Lesser General Public License) este versiunea a treia a
licenţei GNU care specifică faptul că utilizatorul nu are dreptul să modifice creaţia
originală.
 Proprietary Software (Software Proprietar) - termenul software proprietar este
frecvent folosit pentru a desemna programele de calculator care nu sunt software liber
(în particular, nici open source). Înţelesul literal al termenului „software proprietar”
este acela că programul are un proprietar al copyright-ului care poate controla modul
cum este folosit programul, în contrast cu programele în domeniu public. Totuşi,
termenul este frecvent folosit în sens mai îngust, pentru a descrie programele de
calculator care impun restricţii, puse de către proprietari, privind utilizarea,
modificarea, copierea sau publicarea (în formă modificată sau nemodificată). În
acest ultim sens, software-ul proprietar este cunoscut şi ca „software neliber”, prin
contrast cu Software-ul Liber.
 Licenţe shareware – se referă la software-ul proprietar care este furnizat gratuit
pentru o perioadă limitată, dar care conţine restricţii de funcţionalitate, disponibilitate
sau comoditate în utilizare. Programele shareware se obţin gratuit. Acest tip de
software este un software comercial care este supus regulilor dreptului de autor, dar
care poate fi copiat cu scopul de a fi încercat, făcându-se înţeles faptul că, dacă se va
utiliza în continuare, va trebui plătit
Un program shareware este de obicei acompaniat de o cerere de plată, iar licenţa de
distribuţie solicită respectiva plată.
 Licenţe "Careware" - "Careware" reprezintă termenul generic care exprimă acordarea
dreptului de utilizare după următorul principiu: titularul dreptului de autor acordă
dreptul de utilizare "gratuită" a programului pentru calculator cu condiţia ca
utilizatorul să efectueze o donaţie în scopuri caritabile. În cele mai multe cazuri
modalitatea şi beneficiarul donaţiei sunt stabilite de către titularul dreptului de autor.
 Licenţe Full Copyright © - Simbolul drepturilor de autor © este folosit pentru
atenţionarea asupra faptului că acea lucrare este sub drepturile de autor.
Printre cele mai frecvente forme de nerespectare a licenţierii software întâlnite în
practică se numără: utilizarea software-ului pe un număr mai mare de calculatoare sau
de către un număr mai mare de utilizatori decât cel permis prin licenţă, completarea
contractelor de licenţiere cu date false, folosirea altor versiuni decât cea contractată
sau lipsa oricărei forme de licenţiere a software-ului sau simpla utilizare de software
fără licenţa necesară.
Pedepsele sunt pe măsura infracţiunii şi se aplică în mod diferenţiat, în funcţie de gravitatea
acesteia şi de persoana incriminată: pentru persoanele fizice (cum ar fi şeful oficiului de
calcul, administratorul IT, conducătorul instituţiei publice), este prevăzută pedeapsa cu
amendă penală sau cu închisoare. În plus faţă de pedepsele de natură penală, titularii
drepturilor recunoscute şi protejate de lege pot solicita instanţelor de judecată recunoaşterea
drepturilor lor şi constatarea încălcării acestora şi pot pretinde acordarea de despăgubiri
pentru repararea prejudiciului cauzat. La stabilirea despăgubirilor, instanţa de judecată ia în
considerare fie criterii cum ar fi consecinţele economice negative, în special câştigul
nerealizat, beneficiile realizate pe nedrept de făptuitor şi, atunci când este cazul, alte
elemente în afara factorilor economici, cum ar fi daunele morale cauzate titularului
dreptului, fie acordarea de despăgubiri reprezentând triplul sumelor care ar fi fost legal
datorate (respectiv preţul programului pentru calculator) pentru tipul de utilizare ce a făcut
obiectul faptei ilicite, în cazul în care nu se pot aplica criteriile menţionate mai înainte
Cloud Computing

Cloud Computing reprezintă o soluţie de utilizare a resurselor informatice (hardware şi


software) externe, care se pot configura în funcţie de necesităţile beneficiarului. Aceste resurse
pot fi servere, spaţii de stocare, aplicaţii software sau servicii. De remarcat faptul că “Cloud
Computing” reprezintă un mod prin care se pot oferi şi utiliza resurse de calcul, şi nu o nouă
tehnologie.
Prin intermediul acestei soluţii utilizarea resurselor se face la cerere şi în cantităţi variabile,
utilizatorul (respectiv clientul) plătind doar ceea ce consumă - cu alte cuvinte, ce nu se foloseşte,
nu se plăteşte.
Avantajul major al acestei soluţii îl reprezintă posibilitatea utilizării unor resurse tehnice
puternice care permit companiilor mici şi medii să egaleze resurse tehnice ale companiilor
multinaţionale. Alte avantaje ale utilizării acestei modalităţi de informatizare a activităţii
companiilor le reprezintă eliminarea cheltuielilor pentru achiziţionarea şi întreţinerea de servere
şi licenţe software, pentru găzduire, întreţinere, personal tehnic ultraspecializat, actualizare,
abonamente anuale etc. Companiile mici şi medii au avantajul că pot folosi rapid un serviciu
complex.

Tipuri de Cloud Computing

Cloud Computing este clasificat, de obicei, după două criterii:

A. În funcţie de amplasarea soluţiei Cloud:

A.1. Public cloud: infrastructura de calcul se află plasată la sediul furnizorului de cloud. Clientul nu
are vizibilitate şi control asupra locului în care este găzduită infrastructura de calcul. În public
cloud, infrastructura poate fi împărţită între oricare organizaţii.
A.2. Private cloud: infrastructura de calcul este dedicată unei anumite organizaţii şi nu este partajată
cu alte organizaţii. În comparaţie cu public cloud, această soluţie este mai scumpă, dar mai
sigură. Infrastructura de calcul poate fi amplasată la sediul organizaţiei (on premise) sau la
distanţă (off premise). Spre exemplu, în cazul în care se execută o aplicaţie pe un server "on-
premise" înseamnă că serverul este fizic în cadrul companiei. În acest caz un cloud privat
reprezintă o reţea sau centru de date proprietare ce utilizează tehnologii cloud computing, cum ar
fi virtualizarea.
A.3. Hybrid cloud: Organizaţiile pot găzdui aplicaţii critice în cloud privat şi aplicaţiile care au relativ
mai puţine probleme de securitate în cloud public. Utilizarea concomitentă de cloud, atât public
cât şi privat se numeşte cloud hibrid.
A.4. Community cloud: implică partajarea infrastructurii de calcul între organizaţiile din aceeaşi
comunitate. De exemplu, toate organizaţiile guvernamentale dintr-o regiune sau chiar stat pot
participa la infrastructura de calcul dintr-un cloud pentru a gestiona datele referitoare la cetăţenii
care locuiesc în acea zonă.

B. În funcţie de tipul de servicii oferite, soluţiile cloud pot fi:

B.1. Infrastructure as a service (IaaS) implică oferirea de servicii legate de dispozitivele hardware
folosind principiile specifice cloud computing. Acestea pot să includă, de exemplu, servicii de
stocare (baze de date sau de stocare pe disc) sau servere virtuale. Dintre furnizorii importanţi de
IaaS pot fi specificaţi: Amazon EC2, Amazon S3, Rackspace Cloud Servers şi Flexiscale.
B.2. Platform as a Service (PaaS) presupune oferirea unei platforme de dezvoltare în cloud. Aceasta
permite clienţilor să dezvolte aplicaţii noi, folosind API-uri instalate la distanţă şi configurabile.
De obicei, platformele oferite de diferiţi furnizori nu sunt compatibile. Furnizorii tipici de PaaS
sunt: Google Application Engine, Microsoft Azure, aplicaţii force.com găzduite pe infrastructura
Salesforce.com.
B.3. Software as a Service (SaaS) include oferirea de soluţii software în cloud. Utilizatorii pot accesa
aplicaţii software găzduite de către furnizorul de cloud, plătind pentru ceea ce consumă. Acesta
este un sector bine dezvoltat. Pionier în acest domeniu a fost Salesforce.com care o dezvoltat o
soluţie online de tip Customer Relationship Management (CRM). Alte exemple sunt furnizorii de
e-mail online, precum: Googles Gmail şi Microsoft Hotmail, Google docs sau versiunea online
pentru birou a Microsoft numită BPOS (Business Productivity Online Standard Suite).

Caracteristici ale soluţiei cloud computing

1. Disponibilitatea unei infrastructuri de calcul de dimensiuni mari, atunci când acest lucru este
necesar. Aceasta caracteristică asigură faptul că organizaţiile nu au nevoie să îşi configureze
serverele pentru perioadele în care activitatea lor atinge un maxim. Acestea pot fi, în special,
organizaţiile care desfăşoară activităţi mai ales în anumite perioade ale anului sau organizaţii
care lucrează pe bază de proiecte care necesită utilizarea unor pachete software pe perioade
determinate. Utilizarea resurselor de calcul care poate fi crescută sau scăzută în funcţie de
necesităţi poartă denumirea de elastic computing.
2. Utilizează un model de facturare de tipul “plăteşti cât consumi”, care diferă semnificativ de
modele de calcul al plaţii din IT-ul tradiţional, cum ar fi plata per număr de calculatoare sau
utilizatori.
3. De obicei, nu implică un angajament pe termen lung privind utilizarea infrastructurii de
calcul. Furnizorul nu impune folosirea pe termen lung a serviciilor.
4. Cloud computing nu presupune cheltuieli de capital semnificative pentru organizaţie. Spre
deosebire de infrastructura tradiţională IT, în cadrul organizaţiilor care adoptă cloud computing
serviciile informatice sunt doar folosite, fără a fi achiziţionate. Metaforic, se poate spune că, în cloud
computing, resursele de calcul sunt închiriate, în loc de a fi cumpărate.
5. Având în vedere că furnizorul de cloud computing oferă servicii via internet, acestea sunt
disponibile din orice locaţie.
6. Cloud computing poate fi comandat online, fără să fie nevoie de contracte formale detaliate.
Cloud computing oferă oportunităţi importante, mai ales pentru organizaţiile mici, deoarece acestea
pot accesa infrastructură de calcul fără a realiza nicio investiţie iniţială semnificativă. În perioadele de
recesiune economică, acest model economic a găsit un teren fertil şi se prevăd investiţii masive la
nivel mondial.

Premise, beneficii şi limitări


Premisele pe care se bazează soluţia cloud computing sunt următoarele: prognoze greu de
realizat, lipsa de capital cerută, costuri controlabile, activităţi sezoniere, reutilizare de
configuraţii, acces fără instalare şi reducerea cheltuielilor de natură tehnică.
Decizia de a utiliza Cloud Computing trebuie analizată atât din perspectiva beneficiilor, cât şi din
cea a riscurilor şi limitărilor. În urma analizei, pot fi utilizate unul sau mai multe modele de
Cloud Computing. Decizia trebuie să ia în considerare nevoile reale şi trebuie să ţină cont de
strategia organizaţiei care implementează soluţia cloud.
Principalele beneficii şi limitări ale utilizării soluţiei cloud computing sunt prezentate în tabelul
I.6.
Tabelul I.6.
Beneficii Limitări
Accesul la aplicaţii din orice locaţie Nu toate aplicaţiile rulează în cloud
Software gratuit sau plătit în funcţie de Necesitatea existenţei unui anumit suport
utilizare organizaţional
Accesul permanent la infrastructură şi Probleme legate de securitatea şi protecţia
conţinut datelor
Creşterea deschiderii utilizatorilor către Lipsa de încredere din partea utilizatorilor
noile tehnologii
Creşterea capacităţilor funcţionale Necesitatea aderării la anumite standarde
Utilizare offline cu posibilităţi ulterioare Viteza/lipsa Internetului pot afecta modul de
de sincronizare (Google Gears) lucru
Tehnologii înrudite cu soluţia cloud computing

Grid computing implică o reţea de calculatoare care sunt utilizate împreună pentru a obţine
resurse mari şi rapide de procesare. Aceste reţele de calculatoare pot fi prezente fizic în diferite
locaţii. Virtualizarea este un strat abstract care desparte componenta hardware de sistemul de
operare, pentru a oferi o mai buna utilizare a resurselor. Virtualizarea permite ca multiple maşini
virtuale, cu sisteme de operare eterogene, să ruleze separat, una lângă alta, pe aceeaşi maşina
fizică. Maşinile virtuale sunt încapsulate în fişiere, făcând posibilă copierea şi salvarea rapidă a
maşinii. Întregul sistem poate fi mutat în câteva secunde (sistemul de operare, aplicaţiile, Bios-ul
virtual, hardware-ul virtual). Utility Computing defineşte un model pentru calculul plăţii
utilizării serviciilor informatice. Cele mai comune modele de facturare sunt: facturare per
numărul de utilizator (sau conturi de e-mail), facturare per GB (utilizarea spaţiului pe disc),
facturare per oră / zi (utilizarea de servere virtuale pentru o perioadă de timp). Autonomic
Computing este o iniţiativă începută de IBM în 2001. Autonom înseamnă în acest context "auto-
administrarea" sau "auto-corecţia" calculatoarelor, adică calculatoare care se pot corecta în mod
automat, fără intervenţie umană. De exemplu, luăm în considerare o reţea de calculatoare pe care
rulează un set de programe. Atunci când există o defecţiune hardware la unul din calculatoarele
din reţea, programele care rulează pe acel calculator sunt "transferate" pe alte calculatoare din
reţea. Acesta este un exemplu de autonomic computing.
Pachete software pentru prelucrări analitice
Prelucrările analitice (engl. Analytics) reprezintă utilizarea tehnologiei informaţiei, a cercetărilor
operaţionale şi a statisticii pentru rezolvarea problemelor din diverse domenii de activitate, cum
ar fi afaceri, industrie, sănătate, ştiinţe sociale sau altele. Dacă în trecut modelele matematice şi
statistice erau aplicate şi studiate fără ajutorul calculatoarelor, astăzi prelucrările analitice sunt
efectuate cu ajutorul mediilor software.
Prelucrările analitice pot constitui intrări pentru deciziile umane sau pot determina decizii
complet automatizate. În acest ultim caz, ele reprezintă o parte a domeniului cunoscut sub
denumirea de Inteligenţa afacerii (Business Intelligence), definit ca fiind un set de tehnologii şi
procese folosite pentru înţelegerea şi analiza performaţelor unei organizaţii.
Prelucrarea datelor poate fi împărţită în opt niveluri. Primele patru pot fi considerate ca fiind de
bază, incluzând accesul la date şi diferite modalităţi de raportare; următoarele patru niveluri
superioare includ abordări care implică utilizarea unor soluţii de prelucrări analitice, fiecare nivel
punând în discuţie o serie de posibile întrebări referitoare la activitatea unei organizaţii:
 accesare şi raportare:
- rapoarte standard (ce şi când s-a întâmplat?),
- rapoarte ad-hoc (cât, cât de des, unde s-a întâmplat?),
- interogari şi descompuneri (unde este problema?), altele (ce se poate face?)

 prelucrări analitice:
- analize statistice (de ce se întâmplă?),
- prognoze (dacă tendinţa continuă?),
- modelare predictivă (ce se va întâmpla?),
- optimizări (cum este cel mai bine?)
Suportul software pentru prelucrările analitice variază de la instrumente pentru statistică şi
optimizare, relativ simple, incluse în pachete de calcul tabelar (ex. Data Analysis Toolkit şi Solver
pentru Excel) la pachete software orientate pe metodă sau model (SPSS, Systat, AIMMS,
WinQSB) ajunând la pachete integrate complexe ca SAS, Cognos (IBM) sau Business Objects
(SAP). Totodată, pentru a obţine bune performanţe în domeniul analitic este necesar şi un bun
management al datelor, în ideea de a integra, extrage, transforma şi accesa datele organizaţiei sau
orice alte date care vor fi utilizate în procesul analitic.
1. Pachete software pentru prelucrări statistice
În perioada actualǎ nu este de conceput realizarea analizelor statistice, pe seturi mari de date, fără
ajutorul calculatorului. De asemenea, pe piaţa produselor software, sunt disponibile multe
pachete de programe statistice, care oferǎ o largǎ varietate de posibilitǎţi de gestionare şi analiză
a datelor.
Indiferent de pachet, marea majoritate respecta anumite principii generale de utilizare,
respectiv etapele care sunt parcurse în utilizarea produselor software statistice pentru rezolvarea
diverselor analize statistice:
 Definirea variabilelor - înainte de a începe introducerea datelor este necesară definirea
variabilelor. Unele pachete software statistice realizează acest lucru în mod automat, dar
indiferent dacă o fac sau nu este preferabil ca acest lucru să fie efectuat de către utilizatorul
familiarizat cu aceste date. Este bine ca numele variabilelor să fie alese astfel încât să fie uşor
de înţeles, astfel încât seturile de date să poată fi divizate sau concatenate fără a provoca
confuzii. Multe produse program permit de asemenea să se ataşeze variabilei descrieri
textuale sub formă de etichete.
 Introducerea şi pregătirea datelor - majoritatea produselor software statistice dispun, pentru
introducerea datelor, de un ecran de tip spreadsheet. Altele pot de asemenea să importe date
din surse de date alternative, de exemplu Excel, din formate delimitate de tab-uri şi alte
formate statistice uzuale. Înainte de efectuarea analizelor statistice, utilizatorul trebuie să se
asigure de corectitudinea datelor, să verifice inexistenţa erorilor de introducere şi a
inconsistenţei datelor. Verificarea poate fi făcută direct de către utilizator sau pot fi folosite
diverse facilităţi oferite de produsele program. Odată introduse, datele pot fi supuse la o serie
de prelucrări în vederea aducerii lor la forma necesară analizei, cum ar fi concatenări,
interclasări, transformări etc.
 Selectarea metodei statistice care va fi utilizată - înainte de începerea analizei, utilizatorul
trebuie să îşi definească clar scopul acesteia, întrebările la care trebuie să răspundă şi care
metodă sau metode statistice vor fi utilizate pentru a răspunde la aceste întrebări. După
stabilirea cerinţelor şi a metodei de rezolvare se poate trece la utilizarea funcţiei
corespunzătoare din cadrul pachetului de programe.
 Execuţia funcţiei statistice adecvate din cadrul produsului program
 Citirea şi interpretarea rezultatelor – multe pachete de programe statistice dispun de
formate de ieşire specializate, oferă diagrame şi informaţii standard pentru fiecare test
statistic, precum şi informaţii suplimentare, afişabile în funcţie de dorinţa utilizatorului, sub
formă de tabele şi/sau grafice.
 Programarea – dacă produsul software oferă utilizatorului funcţiile statistice şi facilităţile
necesare efectuării analizei dorite, acesta va utiliza opţiunile interfeţei standard bazate pe
meniuri şi icoane. În caz contrar, dacă produsul software oferă această posibilitate, se poate
utiliza limbajul de programare propriu acestuia pentru a realiza programe pentru funcţiile
dorite. Alegerea unui mod de lucru sau al altuia prezintă atât avantaje cât şi dezavantaje.
 Utilizarea modului de lucru bazat pe meniuri şi icoane poate fi util dacă:

- Utilizatorul nu are experienţă în lucrul cu produse software statistice;


- Dacă se rezolvă analize clasice sau seturi de date predefinite;
- Dacă se rezolvă un număr limitat de teste statistice;
- Dacă testele se repetă de un număr limitat de ori.

 Programarea utilizând limbajul de programare propriu al produsului software este


recomandatǎ dacă:
- datele au nevoie de prelucrări anterioare efectuării testelor;
- se doreşte utilizarea repetată a anumitor comenzi sau a unor structuri repetitive;
- se doreşte utilizarea unor analize statistice speciale pentru care meniul produsului
program nu oferă funcţii predefinite;
- se doreşte efectuarea aceluiaşi test de un număr foarte mare de ori sau a aceluiaşi
test pe un număr mare de variabile;
- se planifică utilizarea programului de mai multe ori.
 Afişarea datelor – de multe ori este util ca înainte de prelucrarea lor statistică, datele să fie
vizualizate într-o formă grafică. În acest scop, orice produs software statistic oferă funcţii
specifice.
Datorită multitudinii de produse software statistice se pune problema alegerii produsului adecvat
cerinţelor utilizatorului. Acest lucru se poate face luând în considererare o serie de criterii de
alegere a pachetelor software statistice, criterii care corespund unor aspecte privind: nivelul
analizei care se va realiza, fondurile disponibile pentru achiziţionarea produsului software,
timpul disponibil pentru învăţarea modului de utilizare, nivelul de cunoştinţe statistice al
utilizatorului, ce alte produse software sunt utilizate în cercul de cunoştinţe (deoarece poate fi
necesar schimbul de experienţă sau de date).
Se poate spune că cele mai importante aspecte care trebuiesc avute în vedere la alegerea unui
pachet de programe statistice sunt: caracteristicile bazei de date utilizate, analizele pe care le
efectuează, restricţiile tehnice şi financiare, uşurinţa în utilizare, algoritmii implementaţi precum
şi flexibilitatea în adaptare şi realizarea de noi funcţiuni.
Înainte de a achiziţiona un produs software este necesar să se evalueze sistemul de baze de date
utilizat. Multe pachete de programe nu sunt capabile să manipuleze baze de date de mari
dimensiuni sau diverse tipuri de structuri de date. Elementele de care trebuie să se ţină seama în
evaluarea caracteristicilor bazei de date sunt:
 Modul în care este întreţinută baza de date - dacǎ se utilizează un software de gestiune a
bazelor de date sau pachetul software realizează singur facilităţile aferente acestuia.
 Modul în care produsul accesează baza de date – dacǎ este posibil să se seteze o conexiune
ODBC (Open DataBase Connectivity este o metodă standard de acces la bazele de date care
face posibila accesarea oricărei date provenind din orice aplicaţie), deci elimină necesitatea
importului datelor.
 Dacǎ pachetul respectiv este capabil să creeze noi variabile, grupări şi filtrări de date.
 Dacǎ pachetul software este capabil să citească diverse formate ale diverselor tipuri de date,
de exemplu data calendaristică?
 Cât de mare este baza de date care va fi analizată prin intermediul pachetului software - va fi
capabil acesta să manipuleze aceste date?
Deşi toate produsele software sunt capabile să genereze informaţii statistice descriptive şi testele
de bază, capacitatea de a efectua analize statistice complexe variază de la un produs la altul.
Diversele produse program, utilizate pentru a realiza efectuarea acestor analize, necesită
achiziţionarea de module sau programe adiţionale. Aceste pachete pot fi mai costisitoare, dar multe
dintre ele permit utilizatorului să achiziţioneze numai programele de care are nevoie în momentul în
care apare necesitatea unor analize suplimentare.
Un alt aspect de care trebuie să se ţină seama la achiziţionarea unui produs statistic este
capacitatea acestuia de a afişa rezultatele şi facilităţile grafice pe care le oferă, respectiv
calitatea rapoartelor şi a graficelor.
Alegerea unui produs software poate fi influenţată de resursele hardware, sistemul de operare,
resursele umane, resursele financiare existente comparativ cu cele pe care le necesită noul
produs software statistic.
Alt aspect important îl reprezintă experienţa personalului – dacă personalul care va utiliza
produsul program deţine cunoştinţele necesare utilizării acestuia sau va apărea necesitatea
şcolarizării, eventual angajării unui personal specializat.
Din punct de vedere financiar, se vor ţine seama de costul maxim de achiziţie a produsului
software şi eventual al licenţelor anuale, precum şi de necesitatea de îmbunătăţire a
echipamentului de calcul, instruirea personalului sau angajări suplimentare.
Un produs software a cărui interfaţă a fost proiectată să fie în mod exclusiv prietenoasă poate fi
de fapt inflexibilă, atunci când utilizatorii sunt obligaţi să folosească un set de rapoarte şi grafice
predefinite. Cea mai bună soluţie o reprezintă un produs care să ofere atât un acces rapid şi uşor
la cele mai utilizate funcţii (citirea datelor şi crearea graficelor standard), cât şi flexibilitatea de a
adapta sarcinile existente şi de a realiza altele noi care să corespundă cerinţelor utilizatorilor.
Datorită cerinţelor în continuă schimbare în domeniul cercetărilor statistice precum şi a naturii
dinamice a dezvoltării statisticii, multe produse software nu sunt suficient de cuprinzătoare
pentru a satisface necesităţile utilizatorilor. O întrebare importantă este dacă produsul program
evaluat este capabil să încorporeze noi metode statistice, pe măsura apariţiei acestora, prin
utilizarea unui limbaj de programare propriu pachetului. Din acest punct de vedere cea mai bună
soluţie este un sistem bazat pe meniuri, pentru funcţiile standard, combinat cu un limbaj de
programare puternic pentru a realiza funcţiile speciale de analiză a datelor.
Produsul software trebuie să fie util şi să poată fi folosit de diverse tipuri de utilizatori, diferite
din punct de vedere al gradului de pregătire statistică şi din punct de vedere al domeniului
statistic abordat. Anumite produse software oferă utilizatorului posibilitatea de a dezvolta propria
lui aplicaţie folosind componentele predefinite ale produsului software.
O mare importanţă o are, de asemenea, implicaţiile algoritmilor şi a modului de organizare şi
de structurarea a datelor asupra funcţiilor statistice conţinute de pachetul software, precum şi
posibilitatea de integrare cu mediul utilizatorului şi cu alte produse software. De multe ori,
utilizatorul doreşte să analizeze din punct de vedere statistic seturi de date produse de diverse
alte pachete de programe pe care le deţine. Este de dorit ca produsul software să poată fi integrat
cu uşurinţă, fără a necesita cunoştinţe deosebite de informatică.

2. Pachete software pentru optimizări


Piaţa aplicaţiilor software pentru optimizări sau pentru asistarea deciziei, cuprinde o ofertă vastă şi
foarte variată, numărul de producători fiind de asemenea mare. Asociaţia INFORMS (Institute
for Operations Research and the Management Sciences) din SUA menţine un catalog de astfel de
produse, care cuprinde peste 150 de aplicaţii oferite de către mai mult de 80 de producători.
Pachetele pentru optimizări sunt specializate pentru anumite tipuri de probleme, din categorii ca:
programare liniară şi în numere întregi, programare neliniară, planificarea producţiei, transport,
rute şi logistică. O categorie diferită se axează pe limbaje de modelare, care permit formularea
modelelor de lucru. Pachetele de optimizări se mai pot diferenţia după: tipul de licenţă (pachete
comerciale sau gratuite); adresabilitate (pentru scopuri educaţionale sau pentru utilizare în
context real); grad generalitate / particularitate (pachete care rezolvă probleme cu formulare
generală sau pachete dezvoltate pentru necesităţile specifice ale unui utilizator).

Principalele activităţi în rezolvarea unei probleme de optimizare sunt: definirea


componentelor modelului: variabile, funcţii obiectiv, restricţii; colectarea datelor necesare
modelului; rezolvarea instanţei/instanţelor modelului; rapoarte şi analiza rezultatelor; gestiunea
versiunilor modelului şi a scenariilor de date. Pachetele existente pot informatiza numai unele
dintre aceste activităţi, iar gradul de suport informatic este diferit. Adesea sunt necesare
programe suplimentare pentru pregătirea datelor de intrare în formatul specificat de aplicaţie.
Clasificarea produselor software pentru optimizări se poate realiza în funcţie de diferitele lor
caracteristici şi anume:
 După modul de exprimare a problemelor. Problemele de optimizare sunt exprimate, în
vederea procesării cu calculatorul, în două componente: modelul simbolic şi datele de lucru.
Exprimarea modelelor se poate face în mai multe moduri: reprezentare declarativă – în care
descrierea componentelor modelului poate fi făcută textual (utilizând un limbaj specializat) sau
grafic (permite utilizarea de simboluri prin editoare specializate de exemplu editoare pentru
grafuri) şi reprezentare procedurală – în care descrierea procesului de rezolvare a problemei se
face sub forma unui program, fie dedicat pentru optimizări, fie de tip general, cu utilizarea unei
biblioteci de clase sau funcţii de optimizare. Privind datele de lucru, aplicaţiile au de regulă un
format propriu de memorare în fişiere, dar pot importa date şi din alte surse (baze de date, fişiere
Excel).
 După modul de rezolvare a problemelor. Majoritatea pachetelor de optimizare oferă
posibilitatea de selecţie a modului de rezolvare printr-un solver (rezolvator). Selectarea solver-
ului corespunzător se face pe baza algoritmului utilizat la rezolvare. Informaţii privind algoritmii
disponibili sunt puse la dispoziţie de către producător, dar este utilă şi consultarea unor surse
independente (experţi în algoritmi). Uneori în acest proces de selecţie, pot fi utile câteva reguli
orientative, de exemplu dimensiunea problemei şi caracterul liniar sau neliniar al acesteia. Ideal
este ca decizia să se ia pe baza experienţei de utilizare a algoritmilor cu probleme reale. Astfel,
nu doar viteza de execuţie este importantă, ci şi fiabilitatea şi calitatea soluţiilor. Anterior,
conceptele de solver şi algoritm au fost considerate sinonime; de fapt, un solver conţine de regulă
mai mulţi algoritmi, într-o anumită configuraţie, care influenţează şi preţul de vânzare. De
asemenea, algoritmii au o serie de parametri care pot influenţa radical performanţele şi calitatea
soluţiei. Aceşti parametri sunt setaţi iniţial pe valori stabilite prin teste, dar pot fi neadecvaţi
pentru alte categorii de probleme, în special pentru cele neliniare şi în numere întregi, cu număr
mare de iteraţii. Procesul de selecţie a unui solver cuprinde în mare următorii paşi: formularea
modelului problemei de rezolvat, colectarea datelor de intrare şi selectarea unui algoritm adecvat.
Este important de menţionat că formularea modelului problemei joacă un rol cel puţin la fel de
important ca şi selecţia algoritmului în alegerea unui solver. Dacă modelul problemei corespunde
unei clase standardizate de probleme, se poate găsi un solver deja disponibil. În schimb, dacă
problema nu se înscrie în categoriile acoperite de pachetele software, este necesar să se
descompună problema în subprobleme mai simple, sau să se simplifice problema existentă,
pentru a putea găsi un solver potrivit. Cel mai adesea acest lucru este necesar pentru probleme
complexe de natură discretă sau combinatorială.
 După modul de vizualizare şi analizare a rezultatelor. Pachetele pentru optimizări diferă
considerabil din punct de vedere al facilităţilor de prezentare a rezultatelor, ca funcţii şi format
de prezentare, facilităţile de export al datelor şi rezultatelor în formate specifice altor aplicaţii.
Procesul de construire şi testare a modelelor presupune posibilitatea de a selecta şi examina
rezultatele în diferite moduri, care uneori nu pot fi anticipate. Este deci necesar un mecanism
flexibil de afişare rapidă, interactivă a acestor elemente, fie prin intermediul unei interfeţe
grafice, fie prin comenzi. Pentru utilizarea curentă (frecventă) a modelelor sunt necesare facilităţi
de machetare/formatare a rezultatelor, care să poată fi reutilizate pentru un număr mare de rulări
ale modelului. În acest caz, interfaţa cu utilizatorul poate fi mai complexă, dar acest aspect este
acceptabil. Utilizatorii pot specifica aceste aspecte fie prin şiruri de caractere cu rol de formatare,
fie prin limbajul de comandă pentru generarea rezultatelor; sintaxa acestora poate fi mai uşor de
înţeles şi de modificat decât în cazul comenzilor de procesare a datelor. Pachetele de optimizări
trebuie să facă mai mult decât simpla afişare a rezultatelor elaborate de solver. Problemele de
optimizare sunt adesea de mari dimensiuni, cu sute sau mii de variabile, astfel că rezultatele
trebuiesc sintetizate în forme simplificate şi mai uşor de înţeles. De regulă, datele care prezintă
interes rezultă din calcule bazate pe combinaţii de variabile şi date. Sistemele bazate pe limbaje de
modelare algebrică pot oferi avantaje, deoarece conţin o mare varietate de expresii pentru
specificarea modelelor. Pe lângă numărul mare, rezultatele unei rulări de optimizare sunt adesea
exprimate în mod indexat. Aplicaţiile existente prezintă diferenţe în modul de specificare a
indicilor pe linii şi coloane, sau a celor care segmentează datele pe mai mult de două dimensiuni.
Toate pachetele oferă opţiuni de ieşire sub formă de text, iar unele au şi facilităţi grafice. Aceste
date de ieşire pot fi eventual exportate în alte formate, mai ales pentru programe de calcul tabelar
şi baze de date. Alte pachete conţin instrumente sofisticate de manipulare a datelor şi raportare
cunoscute celor mai mulţi utilizatori de modele de optimizare.
 După asistenţa oferită pentru diagnosticarea erorilor. Erorile din modelele de optimizare pot
fi foarte greu de identificat, deoarece prezenţa lor se manifestă de obicei indirect, prin deficienţe
ale soluţiei obţinute. Printr-un limbaj de modelare sau printr-o interfaţă grafică adecvată se poate
facilita evitarea erorilor; atunci când se generează un model pentru solver se urmăreşte o
construire a modelului clară şi corectă şi verificarea unor erori frecvente. Erorile care totuşi apar
pot fi mai uşor identificate dacă limbajul sau interfaţa reprezintă un mod natural de elaborare a
modelelor. În procesul de căutare a erorilor este util un mediu interactiv care să permită
manipularea şi afişarea facilă a datelor şi rezultatelor. Este utilă şi facilitatea de afişare a
restricţiilor explicite generate pe baza unui model şi a datelor de lucru. În cazul sistemelor care
oferă un limbaj procedural specializat ar fi de dorit să existe un instrument de depanare (debugger)
similar celor din mediile de programare de uz general. Deşi aplicaţiile actuale nu sunt la fel de
sofisticate, unele oferă posibilitatea de execuţie pas cu pas a instrucţiunilor programului. Facilităţile
de depanare constau în principal din mesaje de avertizare cu privire la situaţii de excepţie, de ex.
nemărginire sau nefezabilitate. Unele oferă legături la rutine algoritmice suplimentare, care pot
localiza restricţiile nefezabile, triviale sau redundante.
 După asistarea managementului modelelor. Versiunile unui model şi colecţiile de date sunt
memorate în fişiere de date. Cele mai multe pachete de optimizări au funcţii de gestiune a acestor
fişiere, prin convenţii de nume şi indexare. În unele cazuri există facilităţi avansate de
management al modelelor, care uşurează gestiunea acestor date. În cursul dezvoltării unui model
se vor elabora o serie de versiuni ale acestuia; la fel în cazul aplicării modelelor strategice, care
presupun multe modificări. În mod similar pot fi considerate versiuni multiple ale datelor de
lucru, denumite şi cazuri sau scenarii. Câteva pachete de optimizare permit gestiunea acestora
sub formă de listă sau arbore, împreună cu comentarii, soluţii şi alte informaţii. În plus, aceste
pachete pot afişa aceste structuri în mod comparativ, pentru evidenţierea diferenţelor dintre
modele şi pentru crearea de noi versiuni pornind de la un anumit nod din structura arborescentă.
Spaţiul de stocare utilizat poate fi optimizat prin memorarea diferenţelor dintre versiuni înrudite.
Pe baza acestei facilităţi, un pachet de optimizări poate selecta un optim pe baza mai multor
scenarii cu probabilităţi ataşate; rezultatele acestei programări stohastice sau optimizări robuste
pot genera rezultate mai realiste pentru aplicaţiile de planificare.
Un alt gen de facilităţi pentru managementul modelelor este necesar pentru implementarea
schemelor iterative de ansamblu, bazate pe descompunere, generarea de coloane, relaxare şi alte
principii similare. În aplicaţiile care conţin un limbaj de modelare cu posibilităţi de programare,
schemele iterative pot fi implementate prin definirea mai multor modele care sunt rezolvate prin
alternare: după rezolvarea unei instanţe a modelului, datele rezultate sunt utilizate pentru ajustarea
sau completarea datelor celorlalte instanţe. Pentru a sprijini această activitate, unele sisteme au
facilităţi de denumire a modelelor şi de comutare între ele prin nume, astfel că variabilele unui
model sunt menţinute în timp ce alt model este rulat pentru optimizare.
Tipuri de aplicaţii software pentru optimizări
Dacă o organizaţie a decis să îşi îmbunătăţească activitatea de planificare sau cea operaţională
prin folosirea metodelor de cercetări operaţionale, ea trebuie să facă o alegere cu privire la
proiectarea şi implementarea tehnologiei informatice care să poată realiza această sarcină.
Pentru implementarea aplicaţiilor avansate suport de decizie se pot distinge următoarele abordări
de bază:
 Implementarea unor pachete software specializate;
 Instrumentele software pentru modelarea matematică;
 Modelarea prin intermediul foilor de calcul Excel;
 Programe software pentru componentele de bază;
 Programe software pentru toate componentele.
Un pachet software specializat este o soluţie software completă sau aproape completă,
furnizată de către un vânzător. Multe pachete oferă soluţii orizontale, independente de profilul
activităţii desfăşurate în cadrul organizaţiei, cum sunt de exemplu ERP-urile, CRM-urile, SCM-
urile etc. furnizate de firme ca SAP, IBM sau Oracle. Alte pachete oferă soluţii verticale care
integrează soluţii de cercetări operaţionale adaptate pentru industrii sau procesele de afaceri
specifice, cum ar fi de exemplu, pentru soluţii de planificarea, programarea si optimizare lanţului
de aprovizionare, sau pentru soluţii de automatizare şi informatizare energetică. Programele
software pentru toate componentele reprezintă o soluţie aflată la celălalt capăt al spectrului.
Aceste programe sunt construite personalizat, de la zero, de exemplu în limbaje de programare
precum C++, Visual Basic, Java sau Delphi, cu utilizarea a foarte puţine componente externe.
Programele software pentru componentele de bază reprezintă o variantă la soluţia de utilizare
de programe software pentru toate componentele, care foloseşte diferite pachete de componente
achiziţionate de la diferiţi furnizori, precum şi componente codificate particularizat pentru
organizaţie, integrate într-o soluţie unică. Un exemplu de furnizor de componente software este
ILOG, care vinde componente specifice pentru suport de decizie şi aplicaţii de planificare
avansată. Instrumentele software pentru modelarea matematică precum şi modelarea prin
intermediul foilor de calcul EXCEL pot fi privite ca soluţii intermediare, în care se păstrează
flexibilitatea oferită de abordarea programării unora sau a tuturor componentelor, dar evită
necesitatea programării detaliate prin utilizarea unui limbaj de programare de nivel înalt.
Instrumentele software pentru modelare matematică, sunt special concepute pentru modelarea de
clase de probleme de cercetări operaţionale, cum ar fi programare liniară, programare non-
liniară, programare mixtă în numere întregi.
Selectarea unei anumite abordări de implementare a soluţiei informatice necesită o analiză detaliată
a costurilor şi riscurilor implicate în fiecare abordare. O decizie greşită poate duce la depăşiri de
costuri, întârzieri de proiect sau la o soluţie care nu se potriveşte foarte bine nevoilor de afaceri.
Prin urmare, este esenţial să se facă explicite criteriile de selecţie şi să se revizuiască, conform
acestor criterii, diferitele abordări de implementare. Tabelul II.1. compară diferite abordări de
implementare, în funcţie de efortul implicat în crearea şi menţinerea aplicaţiei software, perioada
de implementare şi flexibilitatea de adaptare la cerere.
Tabelul II.1.
Caracteristici Pachete Instrumente Modelarea cu Programele software Programele
ale abordării software software pentru ajutorul foilor de pentru anumite software pentru
specializate modelare calcul Excel componentele toate componentele
matematică

Uşurinţa de
MARE MEDIE MEDIE MEDIE-MICĂ MICĂ
dezvoltare

Uşurinţa de
MICĂ MARE MARE MEDIE MARE
personalizare

Uşurinţa de
MARE MEDIE MARE MEDIE-MICĂ MICĂ
întreţinere

Viteza de
MEDIE RAPIDĂ RAPIDĂ MEDIE ÎNCEATĂ
implementare

Flexibilitatea MICĂ MARE MARE MEDIE MARE

Aceste caracteristici de nivel înalt pot ajuta la alegerea abordării celei mai potrivite în ceea ce
priveşte dezvoltarea şi implementarea unei soluţiei informatice avansate de suport de decizie.
Tabelul II.2. oferă unele indicaţii în ceea ce priveşte condiţiile în care aceste abordări de
implementare ar putea oferi cea mai bună soluţie.
Tabelul II.2.
Situaţie Pachete software Instrumente software Modelarea cu Programe software Programe
caracteristici specializate pentru modelare ajutorul foilor pentru anumite software pentru
matematică de calcul Excel componentele toate
componentele
Soluţie standard & abordare inovativă inovativă inovativă bazată pe inovativă
standard / dovedită componente de soluţii
non-standard cunoscute

Stabilitatea stabile în evoluţie în evoluţie, dar stabile stabile


cerinţelor restricţionate la
dimensiuni
constante ale
soluţiei

Procesul de Sunt aşteptate puţine Este esenţială programarea Este esenţială Sunt aşteptate puţine Sunt aşteptate puţine
dezvoltare iteraţii în proiectare şi prototipizată şi programarea iteraţii în proiectare şi iteraţii în proiectare şi
implementare incrementală prototipizată şi implementare implementare
incrementală

Perioada de Timp de dezvoltare Este cerut un timp scurt de Este cerut un timp Timp de dezvoltare Este cerut un timp
implementare acceptabil dezvoltare scurt de acceptabil mediu / lung lung de dezvoltare
dezvoltare

Utilizator final Aplicaţia este Aplicaţia este utilizată Aplicaţia este Aplicaţia este utilizată Aplicaţia este utilizată
multiplu / unic utilizată partajat de partajat de către mai mulţi utilizată ca partajat de către mai partajat de către mai
către mai mulţi utilizatori finali instrument mulţi utilizatori finali mulţi utilizatori finali
utilizatori finali personal pentru
creşterea
productivităţii

Cost pentru licenţa, de dezvoltare a redus, dar numai suplimentar de licenţe ridicat pentru
personalizare şi instrumentului şi licenţele dacă este utilizat terţilor pentru unelte sau dezvoltarea şi
pentru implementare componentelelor ca instrument a componentelor este întreţinerea propriei
se recuperează prin cumpărate sunt recuperate personal de recuperat prin soluţii sunt recuperate
productivitate mare a prin activităţile de creştere a dezvoltarea scăzut. şi datorită costului
proceselor şi costuri dezvoltare şi întreţinere productivităţii costurile de întreţinere şi scăzut al licenţelor la
mai mici pentru reduse şi prin timpul prin timpul rapid de terţi
întreţinerea soluţiei rapid de rezolvare a punere in funcţiune
problemelor

Selecţia celei mai adecvate abordări necesită o înţelegere detaliată a practicii existente, o
definiţie clară a obiectivelor procesului de schimbare şi de o analiză aprofundată a cerinţelor de
resurse, costul total de proprietate asupra soluţiei şi riscurile generate de soluţiile alternative.

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