在SAS中读取带有重复变量的宽文件

时间:2013-12-08 21:27:37

标签: sas

我输入的数据如下:

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分开,但它变得混乱,我打赌这是一种非常简单的方法。

2 个答案:

答案 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;