Uploaded by Riccardo Ravelli

Appunti Sas

advertisement
Si crea una cartella sul desktop e si crea una libreria, che alla fine sarà la cartella. Questo assegnare la libreria alla cartella
si fa con:
libname *nome libreria* “il percorso della cartella\*nome cartella*”;
Alla fine di ogni riga ci va sempre il punto e virgola;
Ogni istruzione, che sia data o proc, finisce sempre con il ;
Data Step: creo, modifico, gestisco ed elaboro un dataset.
data;
…
run;
Proc Step: analizzano un dataset senza modificarlo.
proc;
…
run;
infile: sceglie quale file prendere quando non si può fare direttamente “import file” come nel caso dei file .csv.
input: quali sono gli input nel file?
Gli input di default sono di tipo numerico, per poter leggere un input di tipo lettera bisogna aggiungere $ dopo il nome
dell’input di tipo lettera.
firstobs=n: indica che bisogna iniziare a leggere il file dalla n-esima riga.
missover: se non ci sono dei dati, metti che sono mancanti.
dlm: nei file .csv indica qual’è il carattere delimitatore.
dsd: gestisce opportunamente il caso in cui ci sono due virgole consecutive oppure legge correttamente gli oggetti con le
virgolette.
obs=n: legge fino alle n-esima riga. Molto utile per sviluppare il programma su un più piccolo set di dati, se funziona poi si
espanderà a tutto il dataset.
$: serve per indicare gli input alfanumerici ovvero le stringhe, legge di default al massimo 8 caratteri. $10. (questo indica
che legge 10 caratteri, ma può incasinare tutto). $:99. (questo indica che legge al massimo 99 caratteri, tutte queste
accortezze erano state fatte perchè sas è un linguaggio vecchio e una volta c’era un problema di computazione).
proc contents data=corso.permessi; (passo di procedura, fornisce un riassunto del dataset in questione)
proc … data=nome_del_dataset
data corso.auto;
set sashelp.cars;
run;
serve per copiare sashelp.cars in corso.auto
keep make model; (la keep vuole i nomi delle variabili, e tiene solo le due variabili make e model)
drop make model; (opposto di keep, toglie le due variabili make e model)
keep e drop si autoescludono
if invoice > 50000; (ottengo solo le righe con le osservazioni invoice maggiori di 50000)
if invoice > 50000 and origin = ‘Europe’ and cylinders >= 8 (con and si aggiungono più condizioni. Europe è case sensitive)
if origin = ‘Europe’ then output; (questa riga viene eseguita per ogni osservazione del dataset di origine, se è vera allora
l’output viene eseguito su tutto il dataset)
if cylinders = . then output; (il . si usa per dire un valore mancante, si usa per variabili numeriche, per dire che non è
mancante bisogna dire = ne . ( dove ne significa not equal))
differenza = msrp - invoice; (differenza diventa una nuova variabile ma deve andare prima dell’output, se non lo si esplicita
è come se ci fosse un output prima del run;)
funzioni, che si usano solo all’interno di un data step
minimo = min(msrp, invoice); (trova il minimo tra msrp e invoice per ogni riga)
massimo = max(msrp, invoice); (analogo a min)
media= mean(msrp, invoice); (trova la media)
quando uno dei suoi operanti, il risultato è mancante
lunghezza = length(make); (dice la lunghezza di make)
s = substr(make, 2, 3); (a partire dalla variabile make, prendi la sottostringa che inizia in riga 2 ed è lunga 3)
i = index(make, “a”); (prende una stringa e un carattere e dice dove si trova)
data t;
set permessi;
mese = month(completato);
anno = year(completato);
giorno = day(completato);
keep completato giorno mese anno;
run;
esportazione dei dati
data _NULL_; (serve ad esportare senza creare apposta un dataset)
set sashelp.cars;
file “C\…\esportato.csv” dlm=‘,’ dsd;
put make $30. model $:99. invoice;
run;
proc print data=sashelp.cars;
var make model; (var determina quali colonne vengono stampate)
title “Elenco auto”; (crea un titolo)
where make = ‘Honda’ or cylinders >= 10; (vengono stampate solo le
osservazioni dove la variabilie make prende il valore ‘Honda’ oppure ha più
di 10 cilindri. where si usa nei passi di procedura, mentre if nei passi di data)
format msrp 30.; (i valori sono immutati, cambia solo il modo in cui i dati
vengono visualizzati. Utile con dati che sono date)
run;
proc print data=sashelp.citiday;
var date;
format date ddmmyy10.; (oppure gli altri formati di date)
run;
ordinamento
data corso.cars;
set sashelp.cars;
run;
proc sort data=corso.cars;
by msrp; (ordinati in ordine crescente di msrp, per ordinarli in modo decrescente bisogni fare by descending msrp;)
run;
proc print data=corso.cars;
run;
Se qualche valore è lo stesso, bisogna ordinarli per una seconda variabile.
creare un nuovo formato, utile per quando si crea una variabile di tipo categoriale (auto grandi e piccole)
data cars;
set sashelp.cars;
dimensione = 0; (normalmente le dimensione è zero)
if enginesize > 2 then dimensione = 1; (se la variabile enginesize è maggiore di 2, allora la dimensione diventa uno)
run;
proc format; (associa a zero piccolo e a uno grande)
value dimauto 0 = ‘piccolo’
1 = ‘grande’;
run;
proc print data=work.cars;
format dimensione dimauto.; (i nomi di formato contengono .)
run;
format è una questione di rappresentazione verso l’esterno, dentro proc format il nome del formato è senza il punto, nella
format invece bisogna usarlo)
proc mean data=sashelp.cars;
run;
(la procedura con cui possiamo calcolare una serie di statistiche sul dataset)
n numero di osservazioni con valore non mancante, nmiss numero di osservazioni con valore mancante mean, standard
deviation, min, max
sashelp.cars,mean; (mostra solo la media)
var msrp (calcola la media solo della variabile msrp, le variabili sono
quantitative ovvero numeriche)
stratificare le statistiche in base alle osservazioni (per ogni produttore di auto)
class make; (nella class ci sono variabili qualitative)
proc print data=work.cars;
run;
proc means data= work.cars mean nmiss;
var msrp invoice cylinders;
class make dimension;
run;
proc means data=sashelp.cars mean nmiss;
var msrp;
output out=work.riassunto mean=media; (il risultato viene salvato anche in
un dataset, oltre ad essere stampato su schermo)
run;
proc print data=riassunto;
run;
0 vuol dire nessuna stratificazione (statistiche sull’insieme dataset), 1 invece riguarda le statistiche stratificate
proc means data=sashelp.cars mean nmiss nway; (nway dice che la statistica riguardante l’intero dataset non deve essere
insieme alle altre)
qual’è il produttore con il valore minimo?
proc mean data=riassunto min;
id make;
var media;
output out=economico minid=produttore; (minid-> chi realizza il minimo)
run;
proc print data=economico;
run;
concatenare dataset
data autoe;
set sashelp.cars;
if origin = ‘Europe’
run;
data autoa;
set sashelp.cars;
if origin = ‘Asia’
run;
data totale; (dataset di destinazione con osservazione di autoe e autoa)
set autoa autoe;
run;
fondere dataset, deve esserci una variabile comune con lo stesso nome in entrambe.
data province;
set province;
rename sigla = prov; (cambia il nome alla variabile)
proc sort data= province; (per ordinare il dataset)
by prov;
run;
data complessivo;
merge province acque;
by prov; (fusione data dalla variabile prov)
if anno ne .;
run;
proc freq data=sashelp.cars;
tables make * cylinders; (* serve a dividere le due variabili qualitative per cui voglio fare la proc freq)
weight invoice; (come la variabile quantitativa è distribuita rispetto alle due variabili)
run;
proc freq: quando serve una distribuzione che ha anche le percentuali e la frequenza cumulata, oltre
ovviamente alla numerosità, è utile usare la proc freq. Invertire le variabili ( cylinders * make ) traspone la
tabella.
ODS gestisce tutti gli output di qualunque procedura e in particolare si avrà modo di non mostrare l’output della
proc freq su schermo, ma su un dataset specifico.
Eseguendo proc freq all’interno di un ods trace, il registro verrà arricchito con delle informazioni riguardanti gli
oggetti creati dalla proc freq. Creerà un unico percorso
ods trace on;
proc freq data=sashelp.cars;
tables make * cylinders;
weight invoice;
run;
ods trace off;
proc freq data=sashelp.cars;
tables make * cylinders;
weight invoice;
ods output Freq.Table1.CrossTabFreqs = work.risultato (il risultato verrà salvato nel dataset work.risultato)
run;
Download