SAS的資料轉置依資料的結構與轉置的目的不同, 語法略有不同, 以下介紹Transpose資料直轉橫的簡單語法。
[程式一] 是健保資料庫常見的資料型態, 同一個人在不同時間有好幾筆就醫記錄, 在資料檔中AA中包含ID(身份證號), SEX, AGE, FEE(費用), IN_DATE(住院日期)等欄位。
[ 程式一]
data aa;
input id $ sex $ age fee in_date yymmdd10.;
format in_date yymmdd10.;
cards;
A01 F 60 1245 2001-03-04
A01 F 60 1865 2001-04-12
A01 F 60 2973 2001-05-11
A01 F 60 536 2001-07-23
A02 M 23 657 2003-02-01
A02 M 23 2160 2003-06-12
;
run;
若研究者想依IN_DATE(住院日期)將每個人的資料直轉橫, 並保留個人基本資料, 可利用[ 程式二]完成。 (見結果一)
1. 首先宣告執行TRANSPOSE程序, 資料來源為AA;
2. 其次將轉置後結果存入檔案BB中(OUT=BB);
3. 再指定轉置後的住院日期為以DATE開頭的流水號型式命名的欄位名稱(PREFIX=DATE);
4. 以Name=transposed_by 標示被轉置之欄位名稱(可任意書寫), 若不執行此項, 通常預設欄位名稱為 _NAME_;
5. 以VAR指定轉置的欄位, 若不指定, SAS會依程式設定, 自行判斷, 在此例中, 若不指定VAR, SAS會將FEE(費用), IN_DATE(住院日期)指定為被轉置的欄位(見結果二);
6. 以BY指定轉置的依據, 例如此例之基本資料ID(身份證號), SEX, AGE 。即轉置的條件是依每一個人的基本資料去轉, 若不指定, 會將所有資料橫向轉置成一筆。(見結果三)
[ 程式二]
proc transpose data=aa
out=bb
prefix=date
name=transposed_by ;
var in_date;
by id sex age;
run;
[ 結果]
Reference
SAS Global Forum 2009, Coders’ Corner
