SAS/Data Management
From Wikibooks, the open-content textbooks collection
Contents |
[edit] Library
Data are stored in a directory. You can give a name to that directory using the 'libname' statement.
LIBNAME name_of_the_libraray "W:/Desktop" ;
[edit] Read/Describe/list data
- Proc dataset
- Proc content
- Proc print
The Proc datasets allow to list the content of all the datasets in a library
libname lib "W:\…\data" ; proc datasets library = lib; contents data=_all_; run;
[edit] Generate Random Variables
The following program draws 5 observation in a normal distribution with expectancy 1.75 and standard deviation 0.1. The rannor() function draws from a standard normal distribution. The argument specifies the seed. This allows reproducibility.
data taille ; do i = 1 to 5 ; x = 1.75 + 0.1 * rannor(1) ; output ; end ; run;
If you know the quantile function (inverse CDF), you can draw in the distribution using the inverse CDF method. You simple have to draw in a uniform distribution and transform the draw using the inverse CDF function. Here is an example with a Gumbel distribution :
gumbel = - log(-log(ranuni(0))) ;
[edit] Input Data
data base ; input x u ; cards ; 1 -1 2 1 3 -1 4 1 5 -1 ; run ; proc print data = base ; run ;
[edit] Sorting
proc sort data=lib_name.data_name out=lib_name.data_name2 tagsort; by x1 x2; run;
[edit] Merge
data lib_name.data_name3; merge lib_name.data_name3 (in=a) lib_name.data_name2 (in=b); by x1; if a and b; run;
DATA a; INPUT famid name $ inc98; DATALINES; 2 Art 22000 1 Bill 30000 3 Paul 25000;RUN; DATA b; INPUT famid inc96 inc97 inc99; DATALINES; 3 75000 76000 77000 1 40000 40500 41000 2 45000 45400 45800 4 200 300 100 ;RUN; PROC SORT DATA=a; BY famid; RUN; PROC SORT DATA=b; BY famid; RUN; DATA merge121; MERGE a(in = a) b(in = b) ; BY famid; froma = a; fromb = b; RUN;
[edit] Import from other format
You can import from a CSV:
proc import datafile="E:/Data/recidiv.csv" out=lib.recidiv replace; run;
You can also specify the delimiter.
proc import datafile='W:/…/australia2.csv' out=work.australia replace; delimiter = ";"; run;
You can import from an xls file.
proc import datafile="C:/Documents and Settings/.../Bureau/base.xls" out=work.base replace; sheet = "Table 1" ; run;
[edit] Export to other format
First one can export to Excel :
PROC EXPORT DATA= lib.database OUTFILE= "W:/Desktop/export.xls" DBMS=EXCEL2000 REPLACE; RUN;
[edit] Creating aggregate tables
One can create aggregate table using the output delivery system (ODS). The following program creates a table of the cross tabulation and store it in a new dataset.
ods trace on ; ods output CrossTabFreqs = lib.aggregate ; ods listing close ; proc freq data = lib.ficus (where = (effec < 100)); table effec * eff_moy ; run ; ods output clear ; ods output close ; ods trace off ; ods listing ;