楼主: 昂藏9
3375 3

[实际应用] SAS时间提取 [推广有奖]

  • 0关注
  • 0粉丝

博士生

33%

还不是VIP/贵宾

-

威望
0
论坛币
4039 个
通用积分
86.0000
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
41877 点
帖子
42
精华
0
在线时间
516 小时
注册时间
2016-3-13
最后登录
2024-4-26

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
我有一组时间序列
2017-01-02这种
然后想提取年月
用data gaga.mer1;
set gaga.mer1;
month=substr(accper,1,7);
run;
跑出来虽然有这个变量,但是变量是空的,而且也没报错,怎么办
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:SUBSTR CCPER month Gaga subs

沙发
Strive、 发表于 2017-4-29 20:16:40 |只看作者 |坛友微信交流群
这是由于SAS中日期是以数值形式存储,而substr()函数则是作用于字符串。
建议使用year和month函数,后再拼接起来。

使用道具

藤椅
foocares 发表于 2017-4-29 22:56:34 |只看作者 |坛友微信交流群
这短短几行似乎把所有能犯的错都犯了也不容易啊,有时并不是说编译不报错就表示代码做了对的事。
你结果为空的最主要原因是,你在data步创建了一个新的临时数据集,接着又指定从同名的自己身上读记录...
读空值已经是SAS仁慈初始化的结果了,不然给你一堆内存里乱七八糟的数值更摸不着头脑。
再者,如楼上所言,很可能你用substr把一个原本是数值的日期变量强行弄成了字符,在自动数值型转换字符的过程中:
如果是符合数值格式的,那么按BASE12.格式而且要向右对齐,前头要补一串空格,这样的话你很可能读到的是空格;
要么就是2017-01-02被视为非法数值,直接转成空值作为源字符,你再提取当然为空。
最后,就算你侥幸拿对了原始日期转成了正确的字符格式,你调用substr的方法也值得商榷,你只想读月份,为啥要从第一个读起连读7位?那也不是你想要的月份结果啊。

至于正道,楼上大佬已经提了,先确保你读日期进来格式是对的,然后使用正确的姿势调用函数。

使用道具

板凳
Soleilmay 发表于 2017-5-6 00:13:53 |只看作者 |坛友微信交流群
可能發生的問題,以上兩位已經說明了。
variable正確輸入應有的variable type的情況下,你的日期格式應該要顯示圍靠左對齊的2017-01-02格式。
如果整個column排列不齊,因為Substr是從最左邊開始提取的,你很有可能提取到空白的部分。
此時,你可以採用month=substr(left(date), 6, 2);

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-27 07:36