全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1273 3
2013-05-31
data test;      set mzbg.csmardata;  
   where zqdm = '000426';  
   if gljyje ^= . then gljyje = log(gljyje);  
   if gljyje = . then gljyje = 0;
run;

我要对gljyje列取对数运算,因为该列存在缺失值所以我用if条件过滤缺失值,但是运行结果提示:

NOTE: 在以下位置无法执行算术运算。运算结果已设为缺失值。       每个位置的指定方式: (次数)(行:列)。      1 2504:33
似乎if条件没有起到作用,然后我又换成下面的做法仍然不行。
data test;
   set mzbg.csmardata;
   where zqdm = '000426';
   if gljyje = . then gljyje = 1;
   gljyje = log(gljyje);
run;
即把所有缺失值取对数后变为0。(原gljyje列不存在为零的数据)




二维码

扫码加我 拉你入群

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

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

全部回复
2013-5-31 10:07:33
取对数的条件是大于0

if gljyje GT 0 then gljyje=log(gljyje);
else gljyje=.;

你看这样行不?
二维码

扫码加我 拉你入群

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

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

2013-5-31 10:59:04
playmore 发表于 2013-5-31 10:07
取对数的条件是大于0

if gljyje GT 0 then gljyje=log(gljyje);
你说的很对。log()方程不在乎是否缺失,而在乎是否为正值。而作者的条件语句根本没有排除《=0的可能。京剧
二维码

扫码加我 拉你入群

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

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

2013-6-1 16:08:03
thanks very much.
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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