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

如何一次读取sas中的一行数据,sas,Sas,假设我有两行数据要读入 cody: 10 9 20 18 john: 4 5 1 2 我想在数据行中以两行的方式阅读它们,比如: input cody john @@; datalines; 10 9 20 18 4 5 1 2 run; 但这读起来就像科迪:102041约翰:91852 我该如何解决这个问题 我认为解决问题的方法是将名称用作另一列,而不是变量,如下所示: data foo; input var1 $ var2 var3 var4

假设我有两行数据要读入

 cody: 10 9 20 18
 john: 4 5 1 2
我想在数据行中以两行的方式阅读它们,比如:

 input cody john @@;
     datalines;
     10 9 20 18
     4 5 1 2
 run;
但这读起来就像科迪:102041约翰:91852


我该如何解决这个问题

我认为解决问题的方法是将名称用作另一列,而不是变量,如下所示:

data foo;
    input var1 $ var2 var3 var4 var5;
    datalines;
cody 10 9 20 18
john 4 5 1 2
;
run;

我认为解决问题的方法是将名称用作另一列,而不是变量,如下所示:

data foo;
    input var1 $ var2 var3 var4 var5;
    datalines;
cody 10 9 20 18
john 4 5 1 2
;
run;

你需要一次读完科迪的台词,然后一次读完约翰的台词。目前还不清楚最终的数据结构应该是什么样子,但这是一种可能性,然后您可以按照自己的意愿重新构造它,也许可以使用
PROC TRANSPOSE

基本上,我将
name
指定给适当的名称(在这里使用数组,但您可以使用更好的方法,数据驱动的方法,具体取决于您的数据)。然后我循环并告诉SAS继续读取数据,直到它无法再读取为止,使用
truncover
选项(或
misshover
也可以)确保它不会跳到下一行,并为每个值输出新行

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;

你需要一次读完科迪的台词,然后一次读完约翰的台词。目前还不清楚最终的数据结构应该是什么样子,但这是一种可能性,然后您可以按照自己的意愿重新构造它,也许可以使用
PROC TRANSPOSE

基本上,我将
name
指定给适当的名称(在这里使用数组,但您可以使用更好的方法,数据驱动的方法,具体取决于您的数据)。然后我循环并告诉SAS继续读取数据,直到它无法再读取为止,使用
truncover
选项(或
misshover
也可以)确保它不会跳到下一行,并为每个值输出新行

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;

@bzhang它读两行,不是一行,除非你做了些什么。它可能不是您想要的数据结构,但您还没有真正说明该结构是什么。@bzhang它读两行,而不是一行,除非您对它做了些什么。它可能不是您想要的数据结构,但您还没有真正说明该结构是什么。