如何轻松地在SAS中重新格式化数据集
假设数据如下所示:如何轻松地在SAS中重新格式化数据集,sas,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 最少的(昂贵的)开发时间可能是-- 这将运行多少次?每天/每年 有多少行 我们可以每月节省1小时吗?1分钟/年?需要读取整个文件。最后验光。先让它工作。 tkx根据@donPablo的建议进行扩展,下面是如何编写代码。创建一个数组来读取整个数据,然后输出该数组
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
最少的(昂贵的)开发时间可能是--
这将运行多少次?每天/每年
有多少行
我们可以每月节省1小时吗?1分钟/年?需要读取整个文件。最后验光。先让它工作。
tkx根据@donPablo的建议进行扩展,下面是如何编写代码。创建一个数组来读取整个数据,然后输出该数组的每次迭代,这样最终的行数就是原始数据集中的rows*列。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;
它应该正常工作:
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是一个结果数据集。虽然这可能会达到结果,但这是一种糟糕的做法。您将数据读取了5次,在proc append中使用FORCE导致变量名发生更改-这是一个很好的方法,可以让任何人都无法阅读您的代码,并且通常会做一些比需要更复杂的事情。
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;