sas3- import date in SAS/pas DATArodica.lung/sase/cursuri/sas3.pdfpasi pentru crearea de tabele SAS...

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

Transcript of sas3- import date in SAS/pas DATArodica.lung/sase/cursuri/sas3.pdfpasi pentru crearea de tabele SAS...

Page 1: sas3- import date in SAS/pas DATArodica.lung/sase/cursuri/sas3.pdfpasi pentru crearea de tabele SAS din fisiere text 1. Se incarca numele bilbiotecii in care va fi pastrat noul tabel;

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

Page 2: sas3- import date in SAS/pas DATArodica.lung/sase/cursuri/sas3.pdfpasi pentru crearea de tabele SAS din fisiere text 1. Se incarca numele bilbiotecii in care va fi pastrat noul tabel;

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

Page 3: sas3- import date in SAS/pas DATArodica.lung/sase/cursuri/sas3.pdfpasi pentru crearea de tabele SAS din fisiere text 1. Se incarca numele bilbiotecii in care va fi pastrat noul tabel;

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

Page 4: sas3- import date in SAS/pas DATArodica.lung/sase/cursuri/sas3.pdfpasi pentru crearea de tabele SAS din fisiere text 1. Se incarca numele bilbiotecii in care va fi pastrat noul tabel;

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

Page 5: sas3- import date in SAS/pas DATArodica.lung/sase/cursuri/sas3.pdfpasi pentru crearea de tabele SAS din fisiere text 1. Se incarca numele bilbiotecii in care va fi pastrat noul tabel;

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

Page 6: sas3- import date in SAS/pas DATArodica.lung/sase/cursuri/sas3.pdfpasi pentru crearea de tabele SAS din fisiere text 1. Se incarca numele bilbiotecii in care va fi pastrat noul tabel;

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

Page 7: sas3- import date in SAS/pas DATArodica.lung/sase/cursuri/sas3.pdfpasi pentru crearea de tabele SAS din fisiere text 1. Se incarca numele bilbiotecii in care va fi pastrat noul tabel;

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

Page 8: sas3- import date in SAS/pas DATArodica.lung/sase/cursuri/sas3.pdfpasi pentru crearea de tabele SAS din fisiere text 1. Se incarca numele bilbiotecii in care va fi pastrat noul tabel;

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); …

Page 9: sas3- import date in SAS/pas DATArodica.lung/sase/cursuri/sas3.pdfpasi pentru crearea de tabele SAS din fisiere text 1. Se incarca numele bilbiotecii in care va fi pastrat noul tabel;

INFILE

• Forma generala: infile fisiere <optiuni>;

• fisiere – poate fi:

• fileref definit mai devreme prin FILENAME;

• locatia efectiva a fisierului;

• optiune: DLM=…

• implicit spatiu “ “;

Page 10: sas3- import date in SAS/pas DATArodica.lung/sase/cursuri/sas3.pdfpasi pentru crearea de tabele SAS din fisiere text 1. Se incarca numele bilbiotecii in care va fi pastrat noul tabel;

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…

Page 11: sas3- import date in SAS/pas DATArodica.lung/sase/cursuri/sas3.pdfpasi pentru crearea de tabele SAS din fisiere text 1. Se incarca numele bilbiotecii in care va fi pastrat noul tabel;

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;

Page 12: sas3- import date in SAS/pas DATArodica.lung/sase/cursuri/sas3.pdfpasi pentru crearea de tabele SAS din fisiere text 1. Se incarca numele bilbiotecii in care va fi pastrat noul tabel;

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).

Page 13: sas3- import date in SAS/pas DATArodica.lung/sase/cursuri/sas3.pdfpasi pentru crearea de tabele SAS din fisiere text 1. Se incarca numele bilbiotecii in care va fi pastrat noul tabel;

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

Page 14: sas3- import date in SAS/pas DATArodica.lung/sase/cursuri/sas3.pdfpasi pentru crearea de tabele SAS din fisiere text 1. Se incarca numele bilbiotecii in care va fi pastrat noul tabel;

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…

Page 15: sas3- import date in SAS/pas DATArodica.lung/sase/cursuri/sas3.pdfpasi pentru crearea de tabele SAS din fisiere text 1. Se incarca numele bilbiotecii in care va fi pastrat noul tabel;

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

Page 16: sas3- import date in SAS/pas DATArodica.lung/sase/cursuri/sas3.pdfpasi pentru crearea de tabele SAS din fisiere text 1. Se incarca numele bilbiotecii in care va fi pastrat noul tabel;

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.

Page 17: sas3- import date in SAS/pas DATArodica.lung/sase/cursuri/sas3.pdfpasi pentru crearea de tabele SAS din fisiere text 1. Se incarca numele bilbiotecii in care va fi pastrat noul tabel;

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

Page 18: sas3- import date in SAS/pas DATArodica.lung/sase/cursuri/sas3.pdfpasi pentru crearea de tabele SAS din fisiere text 1. Se incarca numele bilbiotecii in care va fi pastrat noul tabel;

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;

Page 19: sas3- import date in SAS/pas DATArodica.lung/sase/cursuri/sas3.pdfpasi pentru crearea de tabele SAS din fisiere text 1. Se incarca numele bilbiotecii in care va fi pastrat noul tabel;

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;

Page 20: sas3- import date in SAS/pas DATArodica.lung/sase/cursuri/sas3.pdfpasi pentru crearea de tabele SAS din fisiere text 1. Se incarca numele bilbiotecii in care va fi pastrat noul tabel;

constante tip DATA

• pentru atribuirea de date unor variabile…

• „ddmmmyy‟d sau „ddmmmyyy‟d;

• forma generala:

„ddmmm<yy>yy‟D sau “ddmmm<yy>yy”D

unde:

• dd –ziua

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

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

• obligatoriu intre ghilimele!

Page 21: sas3- import date in SAS/pas DATArodica.lung/sase/cursuri/sas3.pdfpasi pentru crearea de tabele SAS din fisiere text 1. Se incarca numele bilbiotecii in care va fi pastrat noul tabel;

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;

Page 22: sas3- import date in SAS/pas DATArodica.lung/sase/cursuri/sas3.pdfpasi pentru crearea de tabele SAS din fisiere text 1. Se incarca numele bilbiotecii in care va fi pastrat noul tabel;

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;

Page 23: sas3- import date in SAS/pas DATArodica.lung/sase/cursuri/sas3.pdfpasi pentru crearea de tabele SAS din fisiere text 1. Se incarca numele bilbiotecii in care va fi pastrat noul tabel;

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;

Page 24: sas3- import date in SAS/pas DATArodica.lung/sase/cursuri/sas3.pdfpasi pentru crearea de tabele SAS din fisiere text 1. Se incarca numele bilbiotecii in care va fi pastrat noul tabel;

Crearea directa a tabelelor

• forma generala:

datalines; …date….;

unde:

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

Page 25: sas3- import date in SAS/pas DATArodica.lung/sase/cursuri/sas3.pdfpasi pentru crearea de tabele SAS din fisiere text 1. Se incarca numele bilbiotecii in care va fi pastrat noul tabel;

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

;

Page 26: sas3- import date in SAS/pas DATArodica.lung/sase/cursuri/sas3.pdfpasi pentru crearea de tabele SAS din fisiere text 1. Se incarca numele bilbiotecii in care va fi pastrat noul tabel;

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 ……

Page 27: sas3- import date in SAS/pas DATArodica.lung/sase/cursuri/sas3.pdfpasi pentru crearea de tabele SAS din fisiere text 1. Se incarca numele bilbiotecii in care va fi pastrat noul tabel;

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‟;

Page 28: sas3- import date in SAS/pas DATArodica.lung/sase/cursuri/sas3.pdfpasi pentru crearea de tabele SAS din fisiere text 1. Se incarca numele bilbiotecii in care va fi pastrat noul tabel;

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.

Page 29: sas3- import date in SAS/pas DATArodica.lung/sase/cursuri/sas3.pdfpasi pentru crearea de tabele SAS din fisiere text 1. Se incarca numele bilbiotecii in care va fi pastrat noul tabel;

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;

Page 30: sas3- import date in SAS/pas DATArodica.lung/sase/cursuri/sas3.pdfpasi pentru crearea de tabele SAS din fisiere text 1. Se incarca numele bilbiotecii in care va fi pastrat noul tabel;

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.

Page 31: sas3- import date in SAS/pas DATArodica.lung/sase/cursuri/sas3.pdfpasi pentru crearea de tabele SAS din fisiere text 1. Se incarca numele bilbiotecii in care va fi pastrat noul tabel;

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

Page 32: sas3- import date in SAS/pas DATArodica.lung/sase/cursuri/sas3.pdfpasi pentru crearea de tabele SAS din fisiere text 1. Se incarca numele bilbiotecii in care va fi pastrat noul tabel;

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

Page 33: sas3- import date in SAS/pas DATArodica.lung/sase/cursuri/sas3.pdfpasi pentru crearea de tabele SAS din fisiere text 1. Se incarca numele bilbiotecii in care va fi pastrat noul tabel;

descriptor

• contine:

• numele tabelului

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

• numele si atributele variabilelor

Page 34: sas3- import date in SAS/pas DATArodica.lung/sase/cursuri/sas3.pdfpasi pentru crearea de tabele SAS din fisiere text 1. Se incarca numele bilbiotecii in care va fi pastrat noul tabel;

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

Page 35: sas3- import date in SAS/pas DATArodica.lung/sase/cursuri/sas3.pdfpasi pentru crearea de tabele SAS din fisiere text 1. Se incarca numele bilbiotecii in care va fi pastrat noul tabel;

exemplu

data perm.update;

infile invent;

input Item $ 1-13 IDnum $ 15-19

InStock 21-22 BackOrd 24-25;

Total=instock+backord;

run;