首先,拋開SAS,回憶我們在數學課本上學習的轉置是什么概念,轉置如下圖:
以上就是數學中的轉置。
那么在SAS里該如何轉置呢?
先看語法格式:
PROC TRANSPOSE <DATA=input-data-set> <DELIMITER=delimiter> <LABEL=label> <LET> <NAME=name> <OUT=output-data-set> <PREFIX=prefix> <SUFFIX=suffix>; BY <DESCENDING> variable-1 <<DESCENDING> variable-2 ...> <NOTSORTED>; COPY variable(s); ID variable; IDLABEL variable; VAR variable(s);
其中,VAR variable(s); 確定要轉置的數據,后面跟數據對應的變量名;
ID variable;確定轉置后新變量的變量名,若沒有該語句,則新變量名以COLN的形式命名;
BY <DESCENDING> variable-1 <<DESCENDING> variable-2 ...> <NOTSORTED>; 確定以什么變量分組,最終各個組分別轉置,后面跟要分組的變量名;
COPY variable(s); 對於沒有轉置但是要保留的變量給復制下來;
IDLABEL VARIABLE;/<LABEL=label> 給被轉置的變量加上標簽;
<PREFIX=prefix>新形成的變量的變量名的前綴;
<SUFFIX=suffix>新形成的變量的變量名的后綴;
LET 允許轉置中存在重復值。
先看代碼如下:
DATA A1; INPUT ID X1 $ X2 $ X3 $; CARDS; 1 a1 a2 a3 2 a4 a5 a6 3 a7 a8 a9 ; RUN; PROC TRANSPOSE DATA=A1 OUT=B1; VAR X1 X2 X3; RUN; PROC PRINT; RUN;
代碼中先造了一個如上圖的矩陣,在進行了轉置,輸出結果為下圖:
由結果可知,矩陣的主體就已經轉置好了,其實SAS的PROC TRANSPOSE過程的核心是在於確定VAR語句,VAR跟着的變量名確定好了,整個轉置的功能也完成的80%。
VAR跟着的變量就是原數據集中想轉置的觀測數據對應的變量名。
PROC TRANSPOSE DATA=A1 OUT=B1;
ID X1;
VAR X1 X2 X3;
RUN;
加上ID語句之后的運行結果為:
直接以X1列的觀測作為新變量的觀測了。而在實際應用中我們會以對應的項目名稱變量,為新變量命名(如下面代碼);
DATA A3; INPUT ID XYZ $ X1 $ X2 $ X3 $; CARDS; 1 X a1 a2 a3 1 Y a4 a5 a6 1 Z a7 a8 a9 2 X B1 B2 B3 2 Y B4 B5 B6 2 Z B7 B8 B9 3 X C1 C2 C3 3 Y C4 C5 C6 3 Z C7 C8 C9 ; RUN; PROC TRANSPOSE DATA=A3 OUT=B3(DROP=_NAME_); VAR X1 X2 X3; BY ID; ID XYZ; RUN; PROC PRINT; RUN;
運行結果為:
以上代碼演示了BY語句的效果,以ID的數據分類分組,然后在轉置。
下面我們還可以看看其他幾個options的效果;
如代碼:
PROC TRANSPOSE DATA=A4 OUT=B1(DROP=_NAME_)LET LABEL=STUDENT NAME=TEACHER PREFIX=prefix SUFFIX=suffix; VAR X1 X2 X3; BY ID; ID XYZ; RUN;
得到的結果如下:
有了附加的OPTIONS 的小功能,使數據集看上去更加具有可讀性。