全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
740 7
2023-08-31
望大佬们解释一下,为什么这段SAS程序会报错。
SAS error
二维码

扫码加我 拉你入群

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

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

全部回复
2023-8-31 11:33:08
put 函数的第一个参数应该是数值型变量,上面set数据集里面的a变量为字符型,所以报错了。
二维码

扫码加我 拉你入群

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

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

2023-8-31 13:21:05
HXAI102230 发表于 2023-8-31 11:33
put 函数的第一个参数应该是数值型变量,上面set数据集里面的a变量为字符型,所以报错了。
是的,例子写错 用了if进行了条件判断
二维码

扫码加我 拉你入群

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

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

2023-8-31 13:23:53
pzc1453144122 发表于 2023-8-31 13:21
是的,例子写错 用了if进行了条件判断
应该是这个例子,同样报错了。逻辑上用了if做判断,应该没有问题的呀
data test;
a = '1987-12-23';
run;

data test2;
set test;
if vtype(a)='C' then b = a;
else b = put(a,yymmdd10.);
run;
二维码

扫码加我 拉你入群

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

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

2023-9-1 09:57:15
在SAS执行set test;语句的时候,a变量的类型已经被设置成c了,还用if vtype(a)='C'判断什么呢?
另外put(a, yymmdd10.);这里的a必须是数值变量,
因为set test;的时候,a变量的类型已经被设置成c了,所以报错了。

想要程序能跑出结果的话,可以写成下面这样,但也会出个不友好的NOTE信息
data test;
a = '1987-12-23';
run;

data test2;
set test;
length b $20 c 8;
if vtype(a)='C' then b = a;
if vtype(a)='N' then c = a;
if not missing(c) then b = put(c, yymmdd10.);
run;
二维码

扫码加我 拉你入群

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

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

2023-9-1 10:20:39
AngleeZZ 发表于 2023-9-1 09:57
在SAS执行set test;语句的时候,a变量的类型已经被设置成c了,还用if vtype(a)='C'判断什么呢?
另外put( ...
感谢大佬,你的代码测试没有任何问题。
我还是有个逻辑上的绕不过去,set test;的时候a是字符型了,vtype(a)='C' 为真,应该不会执行 else b = put(a,yymmdd10.);了,逻辑上不用报错的呀
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
栏目导航
热门文章
推荐文章

说点什么

分享

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