首页 > 解决方案 > SAS 输入:用逗号分隔的整数

问题描述

这似乎非常基本,但我根本无法在 SAS 中找到正确的信息来读取我拥有的数据类型,如下所示:

9  Bittersweet                 #FD7C6E  (253, 124, 110)  48 1949
10  Black                      #000000  (0,0,0)          8 1903

我需要将括号中的值读入三个单独的数字变量,并且没有任何信息可以简单地“读入数字字符直到遇到非数字字符”。文件不是完全逗号分隔,更可惜的是(谁“设计”了这个文件格式,应该枪毙,埋葬,复活,再枪毙!)逗号,有时不是。在通过列输入读入的数字之后,我得到了第一个数字和第一组字符,因为#它总是在第 32 列中。我已经读入了六位十六进制值(仅在此处使用字符)。

这是我的 MWE:

Data crayons;
    Infile 'path\crayons.dat' MISSOVER;
    Input crayon_number
          color_name $ 4-31
          hex_code   $ 33-38 @42
          red   3. @','
          green 3. @','
          blue  3. @')'
          pack_size
          year_issued
          year_retired;
Run;

Bittersweet行被正确读入,但不是该Black行。(year_retired这两个都是空白的——我不关心这个。)在这一Black行中,我hex_code正确地得到了变量,但在那之后什么也没有。

所以我想核心问题是:我如何读入一个保证包含逗号的不同长度的整数,特别是当它后面紧跟一个逗号时?

也许在更高的层次上:我可以去哪里找到这些东西?我有这些关于读入脏数据的问题,我不知道去哪里找。以我的经验,SAS 语言参考非常不适合这一点。如果数据适合他们整洁的小盒子,那么您就可以开始了。除此之外的任何东西,它们的参考都是无用的。

非常感谢您的宝贵时间!

标签: sas

解决方案


我会使用带分隔符的列表输入='(,)'

Data crayons;
   infile cards dlm=' (,)' missover;
   Input crayon_number
          color_name &$28.
          hex_code $   
          red   
          green 
          blue  
          pack_size
          year_issued
          year_retired;
   list;
   cards;
9  Bittersweet                 #FD7C6E  (253, 124, 110)  48 1949
10  Black                      #000000  (0,0,0)          8 1903

推荐阅读