有没有办法在不使用FIRSTOBS =的情况下读取数据的特定部分?例如,我有5个不同的文件,所有文件都有几行不需要的字符。我希望我的数据从第一行数字开始读取。但是这5个文件中的每一个都有从不同行开始的第一个数字行。而不是进入每个文件以找到FIRSTOBS应该在哪里,有没有办法我可以检查这个?也许通过使用带有ANYDIGIT的IF语句?
答案 0 :(得分:0)
您是否尝试过SAS文档中的类似内容? Example 5: Positioning the Pointer with a Numeric Variable
data office (drop=x);
infile file-specification;
input x @;
if 1<=x<=10 then
input @x City $9.;
else do;
put 'Invalid input at line ' _n_;
delete;
end;
run;
答案 1 :(得分:0)
这假设您不知道每个文件开头要跳过多少行。我的filerefs是UNIX,可以在另一个需要更改的操作系统上运行示例;
*Create two example input data files;
filename FT15F001 '~/file1.txt';
parmcards;
char
char and 103
10 10 10
10 10 10.1
;;;;
run;
filename FT15F001 '~/file2.txt';
parmcards;
char
char and 103
char
char
char
10 10 10.5
10 10 10
;;;;
run;
*Read them starting from the first line that has all numbers;
filename FT77F001 '~/file*.txt';
data both;
infile FT77F001 eov=eov;
input @;
/*Reset the flag at the start of each new file*/
if _n_ eq 1 or eov then do;
eov=0;
flag=1;
end;
if flag then do;
if anyalpha(_infile_) then delete;
else flag=0;
end;
input v1-v3;
drop flag;
retain flag;
run;
proc print;
run;
答案 2 :(得分:0)
我最终做了:
INPUT City $@;
StateAvg = input(substr(City,1,4),COMMA4.);
IF 5000<= StateAvg <= 7000 THEN
INPUT City 1-7 State ZIP;
ELSE DO;
Delete;
END;
这很有效。感谢您的建议,我回过头来看看示例5,它有所帮助。