如何轻松地在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;