sas - 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 语言参考非常不适合这一点。如果数据适合他们整洁的小盒子,那么您就可以开始了。除此之外的任何东西,它们的参考都是无用的。
非常感谢您的宝贵时间!
解决方案
我会使用带分隔符的列表输入='(,)'
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
推荐阅读
- node.js - “登录继续”应该如何实现?
- c++ - 如何从另一个成员变量是第一类实例的类访问私有成员变量?
- python - Python,定义函数中的 exec() 不起作用
- html - CSS 动画留下杂散像素
- r - 在R中提取子字符串最多为双下划线
- node.js - React Native 和 CSV 有可能吗?
- html - justify-content(flex-end; 对); 属性不工作
- selenium - 如何使用 Selenium 手动和自动查看 Chrome 浏览器存储的本地缓存文件?
- php - 从函数返回的 PHP 对象为空
- c - 如何在循环中使用 sscanf 处理错误以从标准输入获取输入?