在SAS中读取分隔文件的特定列

itz*_*tzy 4 sas

这似乎应该是直截了当的,但我在文档中找不到如何做到这一点.我想在逗号分隔的文件中读取,但它非常宽,我只想阅读几列.

我以为我可以做到这一点,但@指针似乎指向文本的列而不是分隔符定义的列数:

data tmp;
 infile 'results.csv' delimiter=',' MISSOVER DSD lrecl=32767 firstobs=2;
 @1 id
 @5 name$
run;
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我想根据分隔符读取第1和第5列中的内容,但是SAS正在读取文本文件的位置1和位置5的内容.所以如果输入文件的第一行像这样开始

1234567,"x","y","asdf","bubba",...更多变量......

我想id=1234567name=bubba,但我发现了name=567, ".

我意识到我可以阅读每一栏并删除我不想要的那些,但必须有更好的方法.

Joe*_*Joe 6

实际上,@确实指向文本列而不是分隔列.使用我发现的标准输入的唯一方法是读取空白,即

input
id
blank $
blank $
blank $ 
name $
;
Run Code Online (Sandbox Code Playgroud)

然后空白.

但是,如果您不介意以不同方式编写输入,则可以使用更好的解决方案.

data tmp;
 infile datalines;
 input @;
 id = scan(_INFILE_,1,',');
 name = scan(_INFILE_,5,',');
 put _all_;
 datalines;
12345,x,y,z,Joe
12346,x,y,z,Bob
;;;;
run;
Run Code Online (Sandbox Code Playgroud)

它使格式化稍微混乱,因为您需要基本字符格式中不需要的每个变量的put或input语句,但根据您的需要可能更容易.