跳轉到內容

SAS/資料管理

來自華夏公益教科書,開放的書籍,開放的世界
< SAS

資料儲存在目錄中。您可以使用 'libname' 語句為該目錄命名。

LIBNAME name_of_the_libraray "W:/Desktop" ;

讀取/描述/列出資料

[編輯 | 編輯原始碼]
  • Proc 資料集
  • Proc 內容
  • Proc 列印

Proc 資料集允許列出庫中所有資料集的內容

libname lib "W:\…\data" ; 
proc datasets library = lib;
   contents data=_all_;
run;

生成隨機變數

[編輯 | 編輯原始碼]

以下程式從期望值為 1.75、標準差為 0.1 的正態分佈中抽取 5 個觀察值。rannor() 函式從標準正態分佈中抽取。引數指定種子。這允許可重複性。

data taille ; 
do i = 1 to 5 ; 
x = 1.75 + 0.1 * rannor(1) ; 
output ; end ; run;

如果您知道分位數函式(逆 CDF),您可以使用逆 CDF 方法在分佈中進行抽取。您只需在均勻分佈中進行抽取,並使用逆 CDF 函式轉換抽取的結果。以下是用 Gumbel 分佈為例 

gumbel = - log(-log(ranuni(0))) ;

輸入資料

[編輯 | 編輯原始碼]
data base ; 
input x u ; 
cards ; 
1 -1
2 1
3 -1
4 1
5 -1 ;
run ; 

proc print data = base ; run ;
 proc sort data=lib.data out=lib.data2 tagsort;
 by x1 x2;
 run;

預設情況下是升序排序。如果要將最高的值放在最前面,可以使用按降序.

 proc sort data=lib.data out=lib.data2 tagsort;
 by x1 descending x2;
 run;

最好在合併資料之前對其進行排序。

 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;

從其他格式匯入

[編輯 | 編輯原始碼]

您可以從 CSV 檔案匯入

proc import datafile="E:/Data/recidiv.csv"
out=lib.recidiv replace;
run;


您也可以指定分隔符。

proc import datafile='W:/…/australia2.csv' out=work.australia replace;
	delimiter = ";";
run;

您可以從 xls 檔案匯入。

proc import datafile="C:/Documents and Settings/.../Bureau/base.xls"
out=work.base replace;
sheet = "Table 1" ; 
run;

匯出到其他格式

[編輯 | 編輯原始碼]

首先可以匯出到 Excel 

PROC EXPORT DATA= lib.database OUTFILE= "W:/Desktop/export.xls" 
            DBMS=EXCEL2000 REPLACE;
RUN;

建立彙總表

[編輯 | 編輯原始碼]

可以使用輸出傳遞系統 (ODS) 建立彙總表。以下程式建立一個交叉表並將其儲存在新的資料集中。

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 ;
華夏公益教科書