Documente Academic
Documente Profesional
Documente Cultură
Î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
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).
Î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.
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
timp
X12Y34Z56
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:
*-------------------------------------------------------------------------------------- *
sau
/****************************************************************
******************************************************************/
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.
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
Pentru alte tipuri de delimitatori, declaraţia INFILE trebuie folosită împreună cu opţiunea dlm sau
delimiter
sau
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;
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;
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 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.
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
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;
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;
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.
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;
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;
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:
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.
13
libname saveit ’your-data-library’; [1]
data saveit.note_test; [2]
[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
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.
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;
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;
4
PROC PRINT DATA=work.angajati;
WHERE Sex eq 'M' and
Salariu GE 2500;
VAR Nume Varsta Sex Salariu;
RUN;
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;
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;
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.
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.
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.
9
TITLE "Date angajaţi cu instrucţiunea SELECT";
PROC PRINT DATA=Angajati;
RUN;
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
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;
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;
14
Figura IV.6.28. Raport calcul perioadă
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
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ă.
Î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”).
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ă.
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
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
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.
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
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:
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.
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.
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
4
data tabela-rez 1-2;
set A B;
run;
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.
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.
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ă.
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;
Tabela-2
Nr Id Nume Greutate
1 9 Adam 120
2 3 Avram 65
3 5 Ion 95
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;
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.
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.
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 =
Se poate folosi
DATA tabela_rez;
MERGE Angajat Ore (RENAME=(IdPers = Id));
BY Id;
RUN;
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
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
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
12
Codul care va realiza actualizarea este
PROC SORT DATA=preturi;
BY Cod;
RUN;
DATA Preturi_15dec2005;
UPDATE Preturi Preţuri_actualizate;
BY Cod;
RUN;
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;
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 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 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;
Î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
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
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
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.
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.
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;
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:
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ă.
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.
24
001 45000 47000 47500 48000 48000 52000 53000 55000
002 67130 68000 72000 70000 65000 52000 49000 40100
;
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:
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:
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:
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:
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;
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).
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;
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:
Î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).
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.
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;
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;)
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.
Î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).
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
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.
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:
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
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ă:
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
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:
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).
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
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>;
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);
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);
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
Sintaxa:
Î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.
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;
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.
Sintaxa:
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;.
Procedura GPLOT se poate folosi pentru a construi un grafic care arată legătura între două
variabile.
Sintaxa:
- 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;
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
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
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.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))
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])
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.
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.
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
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 “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
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')
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:
unde
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ă.
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:
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:
De exemplu
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.
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.
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:
sau
client=‘Metro’
fisier_client.write(‘client’)
fisier_client.close()
Exemplu 2:
Exemplu:
Expresia str(nr1) + ‘\n’ convertește valoarea referită de variabila nr1 într-un șir și o concatenează
cu ‘\n’ șirului.
Metoda readline() - citirea unei linii din fișier și returnarea ei sub formă de string
Exemplu :
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.
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:
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.).
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
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
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 ViewMaximize 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 ViewMaximize 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.
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.
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
Î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.
Î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.)
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.
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).
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.
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.
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.
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
Î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).
Î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
- 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).
Tabelă Analitică
Depozit de Date
Î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.
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.).
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.
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.)
Î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).
Î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.
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.).
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.
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).
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.).
Î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.
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 - 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.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
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.
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.).
5. În mod implicit nu este specificat niciun format. Pentru a-l seta se va efectua clic pe butonul
Change (figura IV.4.33).
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.
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ă.
Î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.).
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:
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
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.).
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).
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.
Tabela1 Tabela 2
Tabela 1 Tabela 2
Tabela 1 Tabela 2
Tabela 1 Tabela 2
Î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.).
Î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.
Î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).
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).
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).
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).
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.
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).
Î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.
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
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).
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.
Filtru
Coloană Operator Valoare
NumeCategorie = &Categorie
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
2. Se execută clic pe butonul Add din fereastra Prompt Manager (figura IV.4.74).
9. Se încarcă lista de variabile din setul de date sursă şi apoi se execută clic pe butonul OK
(figura IV.4.78).
Crearea filtrului
Produse Furnizori
Produse 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.
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.
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
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.
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.).
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.
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
Î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.)
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.
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).
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
Includerea tipurilor de totaluri pentru coloane, rânduri şi pagini se poate realiza conform figurii
IV.5.18.
Rolul Summary Tables se foloseşte pentru a modifica etichetele, fonturile şi formatele din
tabela rezultatelor (figura IV.5.19).
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ă.
Utilizarea metodei de a specifica un format de coloană se aplică numai în cazul unei prelucrări
particulare (figura IV.5.29.).
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).
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).
Î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.
Î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.
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
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.
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.
Î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).
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.
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
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.
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
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)
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
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.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).
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.
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ă:
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
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
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.