说我有两排数据我试着读。
cody: 10 9 20 18
john: 4 5 1 2
我希望在数据线中以两行样式读取它们,例如:
input cody john @@;
datalines;
10 9 20 18
4 5 1 2
run;
但这就像科迪一样读到:10 20 4 1约翰:9 18 5 2
我该如何解决这个问题?
答案 0 :(得分:2)
您需要同时读取CODY行,然后同时读取所有约翰行。目前还不清楚最终的数据结构应该是什么样的,但这只是一种可能性,然后你可以用PROC TRANSPOSE
来重构这个结果。
基本上,我将name
指定为正确的名称(在此处使用数组,但您可以采用更好的方式,数据驱动方式,具体取决于您的数据)。然后我循环并告诉SAS继续读取数据,直到它无法再读取为止,使用truncover
选项(或missover
也没关系)确保它不会跳到下一行,并为每个值输出一个新行。
data want;
array names[2] $ _temporary_ ("Cody","John") ;
infile datalines truncover;
do _name = 1 to 2;
name = names[_name];
do _i = 1 by 1 until (missing(value));
input value @;
if not missing(value) then output;
end;
input;
end;
drop _:;
datalines;
10 9 20 18
4 5 1 2
run;
答案 1 :(得分:1)
我认为您的问题的解决方案是将名称用作另一列,而不是变量,如下所示:
data foo;
input var1 $ var2 var3 var4 var5;
datalines;
cody 10 9 20 18
john 4 5 1 2
;
run;