Programarea SAS

  • Upload
    mihai

  • View
    226

  • Download
    0

Embed Size (px)

Citation preview

  • 8/17/2019 Programarea SAS

    1/37

    Curs 10: Introducere în programarea SAS

  • 8/17/2019 Programarea SAS

    2/37

    Un programSAS constă dintr -o secvenţă de paşi trimisă

    către execuţie motorului SAS. 

    Programe SAS

    Secţiunile de date (DATA steps) sunt, de obicei,folosite pentru a crea tabele SAS.

    Secţiunile de proceduri (PROC steps) sunt, de obicei,folosite pentru a efectua prelucrări şi interogări. 

    Secţiune de date Raport 

    TabeleSAS

    existente

    TabelăSASnouă 

    Secţiune de proceduri

    Fişier

    Text

  • 8/17/2019 Programarea SAS

    3/37

    Tipuri de fişiere în SAS 

     ASCII

    Externe  Fişiere generate de alte aplicaţii

    Fişiere în SAS Interne Temporare – nume pe un nivel

    Permanente - nume pe nouă niveluri (libref.nume)

     

  • 8/17/2019 Programarea SAS

    4/37

    Instructiunile SAS au următoarele caracteristici:

     încep, de obicei, cu un cuvânt cheie  întotdeuna se termină cu punct şi virgulă 

    Reguli de sintaxă 

    libname ad_data 'C:\exemple';

    data ad_data.orders;

    infile 'C:\exemple\orders.txt';input Order_No 1-5 Prod_ID $ 2-10 

    Quantity 13-15 SellPrice 17-22 Income 25-32;run;

     proc  print data=ad_data.orders;run; proc  means data=ad_data.orders;title 'Orders Analysis';

    var SellPrice;

    run; 

  • 8/17/2019 Programarea SAS

    5/37

    Unul sau mai multe caractere de spaţiere pot fi folosite

    pentru a separa cuvintele. Instructiunile pot începe şi se pot termina în orice coloană. 

    O singură instructiune se poate scrie pe mai multe rânduri.

    Mai multe instructiuni pot fi scrise pe acceaşi linie. 

    Reguli de sintaxă 

    libname ad_data 'C:\exemple';data ad_data.orders;infile 'C:\exemple\orders.txt';

    input Order_No 1-5 Prod_ID $ 2-10 Quantity 13-15 SellPrice 17-22 Income

    25-32;run; proc  print data=ad_data.orders;run; proc  means data=ad_data.orders;

    title 'Orders Analysis‘; var SellPrice; run;

  • 8/17/2019 Programarea SAS

    6/37

    Comentarii bloc: /*comentariu*/

    Comentarii care pot fi incluse in cod: * comentariu;

    cod * comentariu; cod… 

    /* Creaza tabela SAS ad_data.orders */ 

    libname ad_data 'C:\exemple';

    data ad_data.orders;infile 'C:\exemple\orders.txt';

    input Order_No 1-5 Prod_ID $ 2-10 Quantity 13-15 SellPrice 17-22 Income 25-32;

    run;/* Realizeaza un raport lista 

    pentru ad_data.orders */ 

     proc  print data=ad_data.orders;run; 

    Comentarii SAS

  • 8/17/2019 Programarea SAS

    7/377 

    SAS compilează şi execută fiecare secţiune în modindependent bazandu-se pe ceea ce poartă denumirea delimite ale unei secţiuni. 

    Limitele unei secţiuni: 

    Limite explicite: RUN şi QUIT au rolul de a executasecţiunea anterioară; 

    Limite implicite: DATA şi PROC indică începutul uneisecţiuni. 

    O secţiune de date sau de proceduri se termină atunci cîndse întâlneşte o altă secţiune, ceea ce înseamnă căprezenţa declaraţiilor RUN şi QUIT nu este obligatorie. 

    Limite ale unei secţiuni 

  • 8/17/2019 Programarea SAS

    8/378 

    Trebuie furnizate valorile datelor. Nu se salvează ca un set de date într -o locaţie specificată. 

    data ord;input age sex $ prod_id quantity order_date mmddyy8.;

    format order_date yymmdds10.;

    cards;

    25 f 02344 2 05/27/10

    37 m 08798 4 04/29/10

    45 f 09876 1 05/27/10

    19 m 07897 3 05/30/10

     proc sort data=ord ; by descending order_date; proc  print data=ord;title  'Unfulfilled orders';

    Fişiere temporare 

  • 8/17/2019 Programarea SAS

    9/379 

    O bibliotecă SAS este o colecţie care include unul sau mai

    multe fişiere SAS care sunt recunoscute de SAS şi caresunt referite şi stocate în mod unitar. 

    Sintaxa este:

    LIBNAME libref ‘Biblioteca-SAS‘;

    LIBNAME – defineşte o bibliotecă libref – este o referinţă la o bibliotecă, un alias pentru o

    locaţie fizică unde se găsesc fişierele incluse în bibliotecă 

    ‘Bilioteca-SAS‘  – este locaţiea fizică propriu-zisă 

    LIBNAME exemple‘C:\

    curs‘;

    Libname nu este parte a unei secţiuni de date sau deproceduri şi nu are nevoie de RUN pentru a rula.

    Se pot defini oricâte declaraţii LIBNAME. 

    Biblioteca Work este temporară şi se iniţializează la

    dechiderea sesiunii de lucru SAS.

    Biblioteci SAS

  • 8/17/2019 Programarea SAS

    10/3710 

    Sintaxa generala:

    DATA set-de-date-SAS-de-iesire;

    SET set-de-date-SAS-de-intrare;WHERE expresie-conditionala;

    DROP listă-variabile;

    KEEP listă-variabile;

    LABEL var 1=‘eticheta1’ var 2=‘eticheta2’; FORMAT variabila(le) format;

    RUN;

    Crearea seturilor de date SAS din seturi dedate existente -1

  • 8/17/2019 Programarea SAS

    11/3711 

    Implicit toate întregistrările dintr -un set de date de intraresunt scrise în setul de date rezultat.

    Declaraţia WHERE are rolul de a extrage observaţiile dintr -un set de date. O secţiune de date poate include o singurădeclaraţie WHERE.

    Include operatori de comparaţie identici cu cei de lafiltrele din SAS Enterprise Guide.

    Exemple:

    where gen eq ‘M’; 

    where salariu ne .;

    where pozitie contain ‘Vanzari’; 

    where nume like ‘T_M%’; 

    where cod is missing;

    Crearea seturilor de date SAS din seturi dedate existente -2

  • 8/17/2019 Programarea SAS

    12/3712 

    Extragerea (selectarea) variabilelor din setul rezultat serealizează cu ajutorul declaraţiilor DROP şi KEEP: 

    DROP listă-variabile; {cu spaţiu între ele} arată care suntvariabilele care se exclud din setul rezultat

    KEEP listă-variabile; {cu spaţiu între ele} arată care suntvariabilele care se păstrează în setul rezultat 

    Declaraţia LABEL are rolul de a adăuga o etichetă la zonade descriere a unui set de date. Eticheta schimbă modul încare apare numele variabilei în diverse proceduri. Spre

    exemplu, PROC PRINT poate afişa numele etichetei în locde numele variabilei:

    PROC PRINT DATA = set-de-date-SAS LABEL;

    FORMAT este un format de afişare care schimbă modul de

    afişare a variabilelor: format .

    Crearea seturilor de date SAS din seturi dedate existente -3

  • 8/17/2019 Programarea SAS

    13/37

    Citirea datelor din fişiere flat Procesul de citire a fişierelor  de date flat

    13 

  • 8/17/2019 Programarea SAS

    14/37

    Delimitatorul spaţiu

    14 

    Considerând că avem un fişier numit produse.txt care conţine numele, preţulşi categoria a cinci produse, fiecare având valoarea separată printr -unspaţiu, acesta ar avea următoarea formă: 

    hartie 2 birotica

    creione 10 birotica

    apa 6 alimente

    ceai 8 alimente

    tricou 100 haine

    Presupunând că fişierul este stocat în calculatorul local în directorulc:\exemple, programul SAS care citeşte date din acest fişier este:

    data produse1;

    infile 'c:\exemple\produse1.txt';

    input Nume $ Pret Categorie $;

    run; 

  • 8/17/2019 Programarea SAS

    15/37

    Delimitatorul virgulaPentru fişierul de date:

    hartie,2,birotica

    creione,10,birotica

    apa,6,alimente

    ceai,8,alimente

    tricou,100,haine

    se vor folosi următoarele declaraţii pentru a obţine setulde date produse:

    data produse2;infile 'c:\exemple\produse2.txt' dsd;

    input Nume $ Pret Categorie $;

    run;

    15 

  • 8/17/2019 Programarea SAS

    16/37

    Alţi delimitatori Pentru orice alt tip de delimitatori, instrucţiunea infile trebuie

    folosită  împreună cu opţiunea dlm sau delimiter. Au aceeaşi seminificaţie, prima fiind abrevierea celeilalte.

    Exemplu: infile 'c:\date sas\produse.txt' delimiter='/';

    sau infile 'c:\date sas\produse.txt' dlm='/';.

     

    16 

  • 8/17/2019 Programarea SAS

    17/37

    Fisiere cu date in coloane cu latime fixaCel de-al doilea tip de fişiere externe pe care SAS poate

    să le citească sunt cele care conţin date în coloane culăţime fixă. Pentru acestea există două modalităţi decitire:

    coloane de intrare (column input)

    intrări formatate (formatted input)  Avantajul folosirii datelor în coloane cu lăţime fixă este

    acela că datele pot fi citite în orice ordine estenecesară, iar valorile lipsă pot fi specificate prin tot

    atâtea spaţii libere cât are şi lăţimea coloanei.

    17 

  • 8/17/2019 Programarea SAS

    18/37

    Metoda 1Considerăm din nou fişierul  produse.txt , care conţine

    următoarele valori: hartie 2 birotica

    creione10 birotica

    apa 6 alimente

    ceai 8 alimente

    tricou 100haine

     Aşa cum se poate observa, numele are 7 caractere, preţul3, iar categoria 8.

    18 

  • 8/17/2019 Programarea SAS

    19/37

    Fisiere cu date in coloane cu latime fixa Metoda 1: Coloane de intrare foloseşte declaraţia input  

    specificând pentru fiecare variabilă numele său, semnul $

     pentru variabilele caracter, precum şi poziţia de început şi de

    sfârşit a fiecărei variabile în linia de date.data produse3;

    infile 'c:\exemple\produse3.txt';input Nume $ 1-7 

    Pret 8-10 

    Categorie $ 11-18;

    run; 

    19 

  • 8/17/2019 Programarea SAS

    20/37

    Fisiere cu date in coloane cu latime fixa Metoda 2: Intrări formatate poate citi diferite tipuri de

    formate, cum ar fi monedă (numere având semnuldolar sau euro), numere cu zecimale, date în diferiteformate.

    Declaraţia input  are umătoarele opţiuni: semnul @

    urmat de poziţia de început a variabilei în linia de date,numele variabilei, formatul variabilei, dacă acesta estenecesar, precum şi lăţimea coloanei asociată variabilei.

    input @pozitie nume_var ialilă format lăţime. 

    20 

  • 8/17/2019 Programarea SAS

    21/37

    Exemplu metoda 2data produse4;

    infile 'c:\exemple\produse4.txt';input @1 Nume $7. 

    @8 Pret dollar4. 

    @12 Categorie $8.;

    format Pret dollar6.0;

    /*

    datalines;

    hartie $2 birotica

    creione$10 birotica

    apa $6 alimenteceai $8 alimente

    tricou $100haine */ 

    run; 

    21 

  • 8/17/2019 Programarea SAS

    22/37

    Procesare condiţională în programele SAS  Procesarea condiţională reprezintă capacitatea

    programelor SAS de a lua decizii în funcţie de valoriledatelor.

    Principala construcţie pentru procesarea condiţionalăeste declaraţia IF, împreună cu versiunea ei ELSE IF.

    Forma generală a acestei instructiuni este:IF expresie THEN instructiune;

    ELSE instructiune;

    22 

  • 8/17/2019 Programarea SAS

    23/37

    Operatorii logici de comparaţie din SAS

    23 

    Operator de comparatie SintaxaSAS

    Equal to EQ

     Not equal to NE

    Less than LT

    Grater than GT

    Less than or equal to LE

    Grater than or equal to GE

    Equal to one in a list IN

  • 8/17/2019 Programarea SAS

    24/37

    Exemplulibname exemple 'C:\exemple';

    data exemple.produse4;infile 'c:\exemple\produse4.txt';

    input @1 Nume $7. 

    @8 Pret dollar4. 

    @12 Categorie $8.;

    if missing(Pret) or Pret lt 5 then Grup=1;

    else if Pret le 10 then Grup=2;else Grup=3;

    run;

    24 

  • 8/17/2019 Programarea SAS

    25/37

    Subseturi de date Intr-o sectiune de date, observatiile pot fi regrupate intr-

    un subset de date SAS folosind clauzele WHERE,DELETE sau instrucţiunea IF. Exemplu de crearea aunui subset de date pentru categoria de produse“alimente”: 

    data mancare;set exemple.produse;

    where Categorie eq 'alimente';

    run;

    Daca am dori un subset de date pt grupul 1, conditia ar fi:

    where Grup eq 1;

    25 

  • 8/17/2019 Programarea SAS

    26/37

    Subseturi de date

    26 

    Clauza DELETE este folosita pentru a controla care observatii sa nu fie incluse in subsetul de date.

    Sintaxa este: IF expresie THEN DELETE;

    Un subset de date care sa contina toate produsele mai putin alimentele:

    data non_mancare;

    set exemple.produse;

    if  Categorie eq 'alimente' then delete;

    run;

     Acelasi lucru poate fi obtinut folosind clauza WHERE si conditia not equal :

    data non_mancare;

    set exemple.produse;

    where Categorie ne 'alimente';

    run;

     Acelasi lucru poate fi obtinut folosind instructiunea IF fara clauza THEN:

    data non_mancare;

    set exemple.produse;

    if  Categorie ne 'alimente';

    run;

  • 8/17/2019 Programarea SAS

    27/37

    27 

    Vizualizarea codului generat de SAS EnterpriseGuideCod parţial al unei prelucrări 

  • 8/17/2019 Programarea SAS

    28/37

    28 

    Vizualizarea codului generatPentru a vizualiza tot codul SAS necesar pentru generarea

    rezultatelor unei prelucrări, se selectează Tools  Options Tasks General , opţiunea Display all generated SAS code in taskoutput.

  • 8/17/2019 Programarea SAS

    29/37

    29 

    Vizualizarea codului generat

    Cod detaliat pentru

    generarearezultatelor în

    format HTML, PDFsau SAS

  • 8/17/2019 Programarea SAS

    30/37

    30 

    Editatea codului SAS existentCodul SAS generat de o prelucrare este read-only.

     Încercarea de a-l modifica generează apariţia ferestrei dinimagine.

  • 8/17/2019 Programarea SAS

    31/37

    31 

    Editatea codului SAS existent

    Un obiect de tipcod este adăugat

    la proiect.

    Codul poate fi

    editat. Noul cod numai este asociatprelucrării. 

  • 8/17/2019 Programarea SAS

    32/37

    32 

    Personalizarea codului prelucrărilor  

    Selectaţi Preview code 

    pentru aprevizualiza

    codul generat.

    Selectaţi InsertCode… pentru aadăuga cod SAS.

  • 8/17/2019 Programarea SAS

    33/37

    33 

    Personalizarea codului prelucrărilor  

    Selectaţi poziţia încare codul va fi inserat în programul asociat

    prelucrării. 

  • 8/17/2019 Programarea SAS

    34/37

    34 

    Personalizarea codului prelucrărilor  

    Codul personalizateste inclus ca parte aprogramului asociat

    prelucrării. 

  • 8/17/2019 Programarea SAS

    35/37

    35 

    Inserarea automată de cod Selectaţi Tools  Options  Custom Code.

    Inserează cod înainte şi după

     întreg codul trimisspre execuţie. 

  • 8/17/2019 Programarea SAS

    36/37

    36 

    Inserarea codului înainte şi după prelucrări 

  • 8/17/2019 Programarea SAS

    37/37

    Descoperiţi şi testaţi funcţiile oferite de SAS

    Enterprise Guide pentru adăugarea, crearea şiexportul de programe SAS.

    Lucru individual