有没有办法简单地在SAS中转置数据

时间:2016-05-22 17:49:31

标签: sas

我是SAS的新手。我试图记录50多个数据集的表结构,所以我想从每个数据集中取出前5行并在控制台上输出。但是,由于许多这些数据集都有很多列,我想将它们转置。我试图使用proc转置,但显然它不只是翻转结果并不断删除列。

例如,以下代码仅生成仅使用MSGID和LINENO的结果...

proc print data=sashelp.smemsg;
run;

proc transpose data=sashelp.smemsg out=work.test;
run;

proc print data=work.test;
run;

更新: 我认为它不起作用,因为SAS不知道如何在转换后“规范化”数据类型。我希望R中的所有数字都变成字符串。

> df <- data.frame(x=11:20, y=letters[1:10])
> df
    x y
1  11 a
2  12 b
3  13 c
4  14 d
5  15 e
6  16 f
7  17 g
8  18 h
9  19 i
10 20 j
> t(df)
  [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
x "11" "12" "13" "14" "15" "16" "17" "18" "19" "20" 
y "a"  "b"  "c"  "d"  "e"  "f"  "g"  "h"  "i"  "j"  

2 个答案:

答案 0 :(得分:1)

要快速查看SAS数据集中的数据,我通常只使用PUT语句并查看日志。

data _null_;
  set have (obs=5);
  put (_all_) (=/);
run;

如果您只想转置数据,请使用PROC TRANSPOSE。您需要指定变量,否则只能获得数字变量。

proc transpose data=have (obs=5) out=want ;
   var _all_ ;
run;
proc print data=want ;
run;

答案 1 :(得分:0)

这是大致如何做到的。

生成具有25行,6个数字变量和6个字符串变量

的样本数据集
data sample;
  array num_col_(6);
  array str_col_(6) $;
  do row_number = 1 to 25;
    do col_number = 1 to 6;
      num_col_(col_number) = round(ranuni(0),.01);
      str_col_(col_number) = byte(ceil(ranuni(0)*10)+97);
    end;
    output;
  end;
  drop row_number col_number;
run;

转置数据,仅保留5个第一行

proc transpose data=sample(obs=5) prefix=row
               out=sample_tr(rename=(_name_=column));
  var num_col_: str_col_:;
  /* You could also use keywords on the var statement */
  * var _character_ _numeric_; * Lets you decide which type to show first;
  * var _all_; * Keeps original order of variables;
run;

显示结果

proc print data=sample_tr noobs;
  id column;
  var row1-row5;
run;

结果

column      row1  row2  row3  row4  row5 
---------   ----  ----  ----  ----  ----
num_col_1   0.66  0.96  0.85  0.45  0.32 
num_col_2   0.78  0.79  0.64  0.85  0.74 
num_col_3   0.23  0.62  0.46  0.46  0.51 
num_col_4   0.91  0.15  0.16  0.77  0.13 
num_col_5   0.6   0.48  0.32  0.6   0.77 
num_col_6   0.13  0.76  0.67  0.16  0.67 
str_col_1   c     i     i     i     c 
str_col_2   j     k     f     f     c 
str_col_3   e     g     k     h     i 
str_col_4   b     h     d     k     e 
str_col_5   c     h     f     e     f 
str_col_6   i     b     k     i     f