我正在尝试导入和清除某些文件,其中第1列的第一行包含描述和列名。数据从包含“ BEGINDATA”的行开始。 是否可以在sas表中搜索“ BEGINDATA”并将行号分配给宏变量?在下一个数据步骤中,我可以使用firstobs = macro变量仅加载数据。
感谢任何提示!
答案 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;