我是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"
答案 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)
这是大致如何做到的。
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;
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