【问题标题】:reading a string from input file SAS从输入文件 SAS 中读取字符串
【发布时间】:2014-02-21 16:29:48
【问题描述】:

我是 SAS 新手,我的作业需要阅读以下文件: http://www.math.tau.ac.il/~liadshek/Books.txt

我正在尝试以下方法:

DATA books_data;
   INFILE books firstobs=2;
   INPUT year numberBooks words copies annual author;
RUN;

但是作者字段没有正确读取,产生如下错误:

NOTE: Invalid data for author in line 2 28-32.
RULE:     ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0
2         2008 1 82835 668118 199514 "X.C" 32
year=2008 numberBooks=1 words=82835 copies=668118 annual=199514 author=. _ERROR_=1 _N_=1

我尝试按照以下链接中的建议将 DSD 添加到我的命令中:

http://www.ats.ucla.edu/stat/sas/faq/readdsd2.htm http://www.ats.ucla.edu/stat/sas/faq/InfileOptions_ut.htm

但这似乎没有帮助(当我这样做时,所有字段都没有正确读取......)。 我做错了什么?

感谢和抱歉这个愚蠢的问题。

编辑 - 我的解决方案:

 FILENAME books URL "http://www.math.tau.ac.il/~liadshek/Books.txt" ;
 DATA books_data;
    INFILE books firstobs=2 dlm=" " DSD;
    INPUT year numberBooks words copies annual author $;
 RUN;

【问题讨论】:

    标签: sas


    【解决方案1】:

    没有完全回答你的问题,因为你说这是家庭作业,你需要找到一种方法告诉 SAS 'author' 是一个字符变量。如果你不告诉它,它会假设所有变量都应该是数字并相应地抛出错误。

    【讨论】:

    • FWIW,家庭作业问题在 SO 上是完全可以接受的,包括详细回答它们(尽管这取决于回答者的选择)。他们仍然必须满足正常的问题标准(包括不是“为我做这个问题”),但上述条件肯定是合格的。
    • 再详细一点,问题不在于infile 语句,而在于input 语句。
    • 谢谢两位——虽然提示有所帮助,但硬件与技术部分无关:) 对于读者:在字符串类型的变量名称后添加美元符号 ($)
    【解决方案2】:

    为分隔文件编写input 语句的一个好方法是从编写proc import 开始:

    proc import file="blah.txt" out=want dbms=dlm dlm=' ' replace dsd;
    run;
    

    这将在日志中生成包含许多常用选项集的输入代码。我不建议在生产代码中使用proc import,但它作为学习工具非常有用。

    【讨论】:

      最近更新 更多