如何一次读取一行中的数据

时间:2016-05-05 13:45:19

标签: sas

说我有两排数据我试着读。

 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

我该如何解决这个问题?

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;