如何在SAS中轻松重新格式化数据集

时间:2014-03-25 05:11:08

标签: sas

假设数据如下:

A B C
1 3 2
1 4 9
2 6 0
2 7 3

其中A B和C是变量名。

有没有办法将表格转换为

A 1 
A 1 
A 2 
A 2 
B 3
B 4 
B 6 
B 7
C 2 
C 9
C 0
C 3

3 个答案:

答案 0 :(得分:1)

扩展@donPablo的建议,这里是你如何编码的。创建一个数组来读取数据,然后输出该数组的每次迭代,以便最终得到的行数是原始数据集中的行*列。 VNAME函数使您可以将变量名称(A,B,C)作为值存储在单独的变量中。

data have;
input A B C;
datalines;
1 3 2
1 4 9
2 6 0
2 7 3
;
run;

data want;
set have;
length var1 $10;
array vars{*} _numeric_;
do i=1 to dim(vars);
    var1=vname(vars{i});
    var2=vars{i};
    keep var1 var2;
    output;
end;
run;

proc sort data=want;
by var1;
run;

答案 1 :(得分:0)

开发时间最少(昂贵)可能是 -

Read and store the first row

For each subsequent row
    Read the row
    Create three records
Until end

Sort

这将运行多少次?每天/每年?

有多少行?

我们可以节省1小时/月吗? 1分钟/年?有些东西需要读取整个文件。 Optomize last。让它先工作。 TKX

答案 2 :(得分:0)

它应该正常工作:

DATA A(keep A);
new_var = 'A';
SET your_data;
RUN;

DATA B(keep B);
new_var = 'B';
SET your_data;
RUN;

DATA C(keep C);
new_var = 'C';
SET your_data;
RUN;

PROC APPEND base=A data=B FORCE;
RUN;

PROC APPEND base=A data=C FORCE;
RUN;

数据A是结果数据集。