全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3864 3
2017-04-29
我有一组时间序列
2017-01-02这种
然后想提取年月
用data gaga.mer1;
set gaga.mer1;
month=substr(accper,1,7);
run;
跑出来虽然有这个变量,但是变量是空的,而且也没报错,怎么办
二维码

扫码加我 拉你入群

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

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

全部回复
2017-4-29 20:16:40
这是由于SAS中日期是以数值形式存储,而substr()函数则是作用于字符串。
建议使用year和month函数,后再拼接起来。
二维码

扫码加我 拉你入群

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

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

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

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

扫码加我 拉你入群

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

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

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

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群