全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
4108 5
2011-03-30
复制代码


程序中的cov数据集在附件中有截图,名字为cov.png

我程序的目的是希望对于cov数据集得每一行观测中的所有var开头的变量都乘以该观测的x,比如var1=var1*x。输出结果截图也在附件中,名字为结果.png
由于对于cov中的var的数目并不知道,故用宏变量来做。

但是上述程序运行出来有问题,
log显示为:
1356  data wang.cov1;
1357      set wang.cov nobs=all;
1358      %heng(all,x);
ERROR: 在需要数值操作数的 %EVAL 函数或 %IF 条件中发现字符操作数。条件是: &zongshu
ERROR: %TO 值(%DO I 循环中)无效。
ERROR: 宏 HENG 将终止执行。


当我把上述程序中的%heng(all,x);语句改为%heng(2,x);时,就可以运行得到正确结果,(对于例子中的数据all=2)
请问这是为什么啊...应该如何解决啊 谢谢了!
附件列表
cov.png

原图尺寸 4.77 KB

cov.png

结果.png

原图尺寸 5.06 KB

结果.png

二维码

扫码加我 拉你入群

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

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

全部回复
2011-3-31 08:17:36
楼主,先只看你的代码,你的问题出在
复制代码
这段代码中,all在%heng(all,x) 中是不能直接引用的,我给你改了一下,测试通过。
修改如下:
复制代码
其次,你这段代码的思路我觉得不是太对,你的目的是要将以var开头的变量全部乘以x,那你为什么要用观测例数all呢,你将观测增加到3个,就会发现生成的数据集中var3是缺失的。其实用数组就挺简单的。
复制代码
以上酌情参考!
二维码

扫码加我 拉你入群

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

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

2011-3-31 10:17:44
LZ上的程序学习了~
二维码

扫码加我 拉你入群

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

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

2011-4-1 18:29:56
2# baoaibaobao
首先非常感谢您的回答,帮我解决了问题。经常看到你在论坛中帮别人解决问题,深表敬佩!

其次你问的那个为什么不用数组的问题,我来解释下。

原始数据cov中的观测数是一定会等于var开头变量的个数的,所以我用all来确定var开头的变量的个数不会有问题。

大哥您自己贴的程序很巧妙,学到很多,但是如果把你程序中那句drop variable;去掉的话程序运行就会出现问题,会出现如下的error
148  data b;
149  set a;
150  array v(*) var: ;
ERROR: 数组列表中的所有变量必须是相同的类型,如,都是数值型或字符型。
ERROR: 数组列表中的所有变量必须是相同的类型,如,都是数值型或字符型。

能解释下为什么嘛?
二维码

扫码加我 拉你入群

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

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

2011-4-1 18:32:58
4# 邢不行
array v(*) var: ;
这个语句表示的将var开头的所有变量作为数组v,因为variable是个字符变量,如果不删除,是会出错的!
二维码

扫码加我 拉你入群

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

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

2011-4-1 19:52:08
5# baoaibaobao

受教了! 谢谢!
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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