我输入的数据如下:
var1 var2 var3 var2 var3 ...
其中每行的值为var1
,后跟不同数量的var2
- var3
对。阅读此输入后,我希望数据集包含每个var1
的多条记录:每对var2
/ var3
一条记录。
所以如果输入文件的前两行是
A 1 2 7 3 4 5
B 2 3
这会生成4条记录:
A 1 2
A 7 3
A 4 5
B 2 3
有一种简单/优雅的方法吗?我已经尝试将每一行作为一个长变量读取并与scan
分开,但它变得混乱,我打赌这是一种非常简单的方法。
答案 0 :(得分:1)
我确信有很多方法可以做到这一点,但这是第一个出现在我脑海中的方法:
data want(keep=var1 var2 var3);
infile 'path-to-your-file';
input;
var1 = input(scan(_infile_,1),$8.);
i = 1;
do while(i ne 0);
i + 1;
var2 = input(scan(_infile_,i),8.);
i + 1;
var3 = input(scan(_infile_,i),8.);
if var3 = . then i = 0;
else output;
end;
run;
_infile_
是一个自动SAS变量,包含当前读取的记录。为您阅读的每个变量使用适当的informat
。
答案 1 :(得分:1)
像这样(带跳回的条件输入):
data test;
infile datalines missover;
input var1 $ var2 $ var3 $ temp $ @;
output;
do while(not missing(temp));
input +(-2) var2 $ var3 $ temp $ @;
output;
end;
drop temp;
datalines;
A 1 2 7 3 4 5
B 2 3
;
run;