sas3- import date in SAS/pas DATA193.231.19.17/~rodica.lung/sas/cursuri/sas3.pdfpasi pentru crearea...

35
SAS 3 Conf. dr. Rodica Ioana LUNG [email protected]

Transcript of sas3- import date in SAS/pas DATA193.231.19.17/~rodica.lung/sas/cursuri/sas3.pdfpasi pentru crearea...

  • SAS 3 Conf. dr. Rodica Ioana LUNG [email protected]

  • obiective

    • Din nou despre biblioteci…

    • Despre fisiere text…

    • Creare de tabele SAS

    • Citirea din fisiere

    • Crearea de variabile noi

    • Selectare de observatii

    • Citirea datelor instream;

    • Verificarea unui pas data;

    • Salvarea unui tabel SAS in format fisier text;

    • procesarea pasului DATA

  • fisiere text… de ce?

    • Fisiere text care contin date organizate pe campuri.

    • Sunt “universale” – nu depind de:

    • Sistemul de operare;

    • Programul de software utilizat pentru citire/scriere;

    • De obicei avem informatii cu privire la organizarea

    fisierului:

    • Numele / tipul / marimea campurilor;

    • O descriere a lor pentru a putea fi interpretate

  • pasi pentru crearea de tabele SAS din

    fisiere text 1. Se incarca numele bilbiotecii in care va fi pastrat noul

    tabel;

    2. Se ruleaza un pas DATA prin care se citeste fisierul text

    si care creeaza tabelul. Se specifica:

    1. Locatia/numele fisierului text

    2. Numele tabelului SAS

    3. O referinta catre fisierul text

    4. O descriere a datelor

    3. Dupa pasul DATA tabelul e gata de afisare/ interpretare/

    procesare

  • lista principalelor instructiuni convertirea fisierului text in SAS

    Sarcina Instructiunea SAS

    Atribuirea unei biblioteci SAS LIBNAME

    Referirea unui fisier extern FILENAME

    Denumirea unui tabel SAS DATA

    Identificarea unui fisier extern INFILE

    Descrierea datelor INPUT

    Executarea pasului DATA RUN

    Afisarea datelor PROC PRINT

    … PROC/ DATA

  • LIBNAME

    • Pentru a crea permanent un tabel se declara biblioteca

    (se denumeste o eticheta libref catre directorul unde se

    salveaza tabelul)

    LIBNAME curs3 “C:\...”;

    • Nu e nevoie de LIBNAME daca se lucreaza cu fisiere

    temporare in biblioteca WORK.

    • Se anuleaza comanda cu:

    LIBNAME curs3 CLEAR;

    libref

  • FILENAME

    • Inainte de citirea datelor trebuie indicat fisierul (cu locatie)

    (in libname se indica doar un director/ in filename se indica fisierul)

    FILENAME teste „C:\users\ro\teste.dat‟;

    teste este referinta (fileref) la fisierul teste.dat.

    • Referirea unui director cu mai multe fisiere text:

    FILENAME teste „C:\users\ro\‟;

    director

  • referirea fisierului

    • In pasi DATA sau PROC se foloseste fileref la fel ca si

    libref;

    … infile teste; ….

    Referirea fisierului dintr-un director filename

    … infile teste(exemplu.dat); …

  • INFILE

    • Forma generala: infile fisiere ;

    • fisiere – poate fi:

    • fileref definit mai devreme prin FILENAME;

    • locatia efectiva a fisierului;

    • optiune: DLM=…

    • implicit spatiu “ “;

  • INPUT

    • atunci cand:

    • datele sunt organizate pe campuri fixate (ca latime);

    • contin doar caractere/valori numerice standard;

    Standard:

    • numere

    • zecimale

    • numere in forma

    “scientific” sau

    notate cu E

    • semne + sau -

    Non-standard:

    • caractere speciale

    (%$,#...)

    • data/timp

    • data codificata

    binar/hexazecimal…

  • INPUT

    • forma generala: input variabila; startcol-endcol…;

    • variabila – numele variabilei SAS atribuit campului;

    • $ - atribuie tipul caracter;

    • startcol/endcol coloana de inceput/sfarsit;

    filename exer 'c:\...\exer.dat';

    data exercise;

    infile exer;

    input ID $ 1-4 Age 6-7 ActLevel $ 9-12 Sex $ 14;

    run;

  • tot INPUT

    • se pot citi oricare din campurile din fisierul text

    • sau toate

    • campurile pot fi citite in orice ordine

    • daca un camp ocupa o singura coloana se poate preciza doar startcol;

    • sfat: la crearea variabilelor (cu input sau altfel), felul cum

    apar prima oare e modul in care sunt salvate (majuscule/

    minuscule).

  • EXEMPLU

    filename tests „C:\...\tests.dat‟;

    data work.stress;

    infile tests obs=10;

    input ID 1-4 Name $ 6-25

    RestHR 27-29 MaxHR 31-33

    RecHR 35-37 TimeMin 39-40

    TimeSec 42-43 Tolerance $ 45;

    run;

    VERIFICAM LOG;

    Afisam: PROC PRINT

    citeste DOAR 10 randuri;

    STERGEM dupa ce am verificat ca citirea e ok

  • LOG

    • Trebuie verificat intotdeauna LOG-ul

    • pasul DATA poate fi procesat aparent in regula

    • volumul mare de date poate acoperi o citire gresita

    • chiar daca apare o citire invalida (de ex. trebuie citit numar dar

    apare caracter) pasul DATA NU se opreste!

    • fisierul text trebuie corectat si reluat…

  • Sugestie:

    • scrie-ti pasul DATA cu obs=n la INFILE

    • rulati pasul DATA

    • verificati LOG

    • verificati datele rezultate

    • stergeti obs=

    • reluati pasul DATA

    • verificati LOG

    • verificati datele din nou

  • crearea si modificarea variabilelor

    • forma generala: variabila=expresie;

    unde:

    • variabila – numele unei variabile noi sau existente;

    • expresie – orice expresie SAS valida care poate sa:

    • transforme variabile;

    • creeze variabile noi

    • proceseze variable cu diferite conditii

    • calculeze valori noi

    • atribuie valori noi…

    • expresie - succesiune de operatori si operanzi…

    • operanzi: nume de variabile sau constante

    • operatori: operatori speciali/paranteze/functii.

  • OPERATORI

    OPERATOR Actiune prioritate

    - - Unar (-x) I

    ** Ridicare la putere I

    * Inmultire II

    / Impartire II

    + Adunare III

    - Scadere III

    • Ordinea operatiilor:

    • prioritatea;

    • stanga ->dreapta la prioritate II si III

    • dreapta -> stanga prioritate I

    • control: paranteze • COMPARATII: la fel ca la where

  • exemple…

    data work.stress;

    infile tests;

    input ID 1-4 Name $ 6-25 RestHr 27-29 MaxHR 31-33

    RecHR 35-37 TimeMin 39-40 TimeSec 42-43

    Tolerance $ 45;

    TotalTime=(timemin*60)+timesec;

    run;

  • exemple…

    data work.stress;

    infile tests;

    input ID 1-4 Name $ 6-25 RestHr 27-29 MaxHR 31-33

    RecHR 35-37 TimeMin 39-40 TimeSec 42-43

    Tolerance $ 45;

    resthr = resthr+(resthr*.10);

    run;

  • constante tip DATA

    • pentru atribuirea de date unor variabile…

    • „ddmmmyy‟d sau „ddmmmyyy‟d;

    • forma generala:

    „ddmmmyy‟D sau “ddmmmyy”D

    unde:

    • dd –ziua

    • mmm – luna prescurtata (JAN, FEB,…)

    • yy sau yyyy – anul (2 sau 4 cifre)

    • obligatoriu intre ghilimele!

  • exemplu…

    data work.stress;

    infile tests;

    input ID 1-4 Name $ 6-25 RestHr 27-29 MaxHR 31-33

    RecHR 35-37 TimeMin 39-40 TimeSec 42-43

    Tolerance $ 45;

    TotalTime=(timemin*60)+timesec;

    TestDate='01jan2000'd;

    run;

    Time='9:25't;

    DateTime='18jan2005:9:27:05'dt;

  • filtrarea datelor

    • pe masura ce datele sunt citite, se pot filtra…

    • instructiunea IF in pas DATA are rol de filtrare

    • se vor procesa doar observatiile care satisfac conditiile specificate

    in IF;

    • forma generala:

    IF expresie; • unde expresie este orice expresie SAS valida

    • daca expresia are valoarea ADEVARAT, pasul DATA proceseaza observatia

    respectiva;

    • daca nu, nici o alta instructiune din pasul DATA nu mai e procesata pentru

    acea observatie – se trece la inceputul pasului DATA pentru observatia

    urmatoare;

  • exemplu

    data work.stress;

    infile tests;

    input ID 1-4 Name $ 6-25 RestHr 27-29 MaxHR 31-33

    RecHR 35-37 TimeMin 39-40 TimeSec 42-43

    Tolerance $ 45;

    if tolerance='D';

    TotalTime=(timemin*60)+timesec;

    run;

  • Crearea directa a tabelelor

    • forma generala:

    datalines; …date….;

    unde:

    • intr-un pas DATA se poate folosi DATALINES o singura data;

  • exemplu

    data work.stress;

    input ID 1-4 Name $ 6-25 RestHr 27-29 MaxHR 31-33

    RecHR 35-37 TimeMin 39-40 TimeSec 42-43

    Tolerance $ 45;

    if tolerance='D';

    TotalTime=(timemin*60)+timesec;

    datalines; 2458 Murray, W 72 185 128 12 38 D

    2462 Almers, C 68 171 133 10 5 I

    2501 Bonaventure, T 78 177 139 11 13 I

    2523 Johnson, R 69 162 114 9 42 S

    2539 LaMance, K 75 168 141 11 46 D

    2544 Jones, M 79 187 136 12 26 N

    2552 Reberson, P 69 158 139 15 41 D

    2555 King, E 70 167 122 13 13 I

    2563 Pitts, D 71 159 116 10 22 S

    2568 Eberhardt, S 72 182 122 16 49 N

    ;

  • Crearea de fisiere text din tabel SAS

    • daca dorim sa salvam in format text un tabel creat in

    SAS…

    • folosim pas DATA

    • folosim in loc de nume cuv. cheie _NULL_ (permite folosirea

    pasului DATA fara a specifica numele unui tabel SAS)

    • folosim FILE si PUT pentru a trece datele in fisiere (similar cu

    INFILE si INPUT)

    data _null_;

    set work.stress;

    file …..

    put ……

  • FILE

    • forma generala:

    FILE fisier;

    unde fisier poate sa fie • un fileref catre un nume definit anterior de utilizator;

    • locatia (cu nume) efectiva a fisierului in care se exporta datele;

    file datenoi; // datenoi a fost definita anterior cu FILENAME;

    file „C:\locatie\numefisier‟;

  • descrierea datelor - PUT

    (similar cu INPUT)

    • forma generala:

    PUT variabila startcol-endcol;

    • unde:

    • variabila este numele variabilei scrise (salvate);

    • startcol indica coloana unde incepe sa scrie variabila;

    • endcol – sfarsitul;

    • nu e nevoie de semnul de $;

    • daca nu apare FILE inainte de PUT in pasul DATA, atunci

    observatiile vor fi scrise in LOG.

  • exemplu

    data _null_;

    set work.stress;

    file 'c:\...\stress.dat';

    put id 1-4 name 6-25 resthr 27-29 maxhr 31-33

    rechr 35-37 timemin 39-40 timesec 42-43

    tolerance 45 totaltime 47-49;

    run;

  • mai multe despre pasul DATA

    • procesarea unui pas DATA are loc in doua faze:

    • compilare

    • se scaneaza fiecare instructiune pentru erori de sintaxa

    • daca e cazul se opreste procesarea;

    • la final se creeaza partea descriptiva a tabelului SAS

    • executie

    • citirea efectiva a datelor;

    • pasul DATA se repeta pentru fiecare observatie in parte.

  • Output – tabel SAS

    se initializeaza variabilele ca “missing”

    - se executa INPUT

    - se executa alte instructiuni

    se repeta pana se ajunge la sfarsit de fisier/date

    compilare

  • compilarea

    • la citirea fisierului text: se creeaza un input buffer care sa pastreze o inregistrare din fisierul extern;

    • se construieste Program Data Vector (PDV) – zona de memorie in care se construieste tabelul SAS.

    • PDV contine doua variabile (automat) care se folosesc doar pentru procesare (nu sunt parte din tabel) • _N_ numara de cate ori se executa pasul DATA

    • _ERROR_ semnaleaza eroare (valoare implicita este 0, in caz de eroare ia valoarea 1)

    • instructiunea INPUT stabileste componentele din PDV

    • toate variabilele create in pasul DATA sunt adaugate

    • daca nu sunt erori se creaza partea de descriptor a tabelului

  • descriptor

    • contine:

    • numele tabelului

    • numar de observatii si variabile (la inceput sunt 0)

    • numele si atributele variabilelor

  • executie

    • partea in care se creaza efectiv tabelul

    • variabilele din PDV sunt initializate cu „missing‟ inainte de fiecare

    executie a pasului DATA

    • fiecare instructiune se executa pe rand;

    • INPUT citeste inregistrarile urmatoare din fisierul extern identificat

    de INFILE si scrie valorile in PDV

    • daca e cazul se executa restul instructiunilor

    • valorile din PDV se scriu in tabelul SAS

    • programul revine la inceputul pasului DATA

    • pasul DATA se executa pana se ajunge la sfarsitul fisierului

  • exemplu

    data perm.update;

    infile invent;

    input Item $ 1-13 IDnum $ 15-19

    InStock 21-22 BackOrd 24-25;

    Total=instock+backord;

    run;