SAS在列中找到第一个值并获取行号

时间:2019-03-04 18:09:20

标签: sas position

我正在尝试导入和清除某些文件,其中第1列的第一行包含描述和列名。数据从包含“ BEGINDATA”的行开始。 是否可以在sas表中搜索“ BEGINDATA”并将行号分配给宏变量?在下一个数据步骤中,我可以使用firstobs = macro变量仅加载数据。

感谢任何提示!

2 个答案:

答案 0 :(得分:1)

当然!看到这个例子。

/* Generate example data */
data have;
    do i = 1 to 10000;
        if(i = 100) then description = 'BEGINDATA';
            else call missing(description);

        value = rand('uniform');
        output;
    end;

    drop i;
run;

/* Get row where the data begins. Only keep the description variable 
   to reduce the size of the PDV */
data _null_;
    set have(keep=description);

    if(description = 'BEGINDATA') then do;
        call symputx('startrow', _N_, 'G');
        stop;
    end;
run;

/* Read from the data start row */
data want;
    set have(firstobs=&startrow.);
run;

答案 1 :(得分:0)

在已经“导入”之后,您无能为力。但是,如果您的源文件只是一个文本文件,那么读取它的数据步骤可以在读取数据的同一步骤中跳过前缀。

data want;
  infile 'myfile.csv' dsd truncover ;
  input test :$20. @1 @;
  do while (test ne 'BEGINDATA');
     input ;
     input test :$20. @1 @;
  end;
  * Code to read the actual data lines ;
run;