假设数据如下:
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
答案 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是结果数据集。