楼主: 木叶知秋
2458 5

关于宏变量的问题 [推广有奖]

  • 0关注
  • 2粉丝

博士生

10%

还不是VIP/贵宾

-

威望
0
论坛币
1237 个
通用积分
0.0002
学术水平
29 点
热心指数
30 点
信用等级
31 点
经验
3622 点
帖子
110
精华
0
在线时间
304 小时
注册时间
2009-3-29
最后登录
2023-9-8

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
QQ图片20151007173207.png
有如上数据集,希望将同一ID同一日期a+b=0的赋值为0
程序如下:
  1. data test2;
  2.         set test1;
  3.           array arr(*) col:;
  4.         call symput('n',dim(arr));
  5.         do i=1 to &n;
  6.                 if arr(i) eq . then arr(i)=0;
  7.         end;
  8.         do j=1 to &n-1;
  9.                 do k = &j+1 to &n;
  10.                         if arr(j)+arr(k)=0 then do;
  11.                         arr(j)=0;arr(k)=0;leave;
  12.                         end;
  13.                 end;
  14.         end;
  15. run;
复制代码
程序运行提示&J+1处错误”ERROR 22-322: 语法错误,期望下列之一: 名称, 带引号的字符串, 数值常数, 日期时间常数, 缺失值, INPUT, PUT”为什么对于宏变量n可以&n-1而J则提示错误,求大神指教?多谢。
二维码

扫码加我 拉你入群

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

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

关键词:symput Error Input array Leave 字符串 ERROR 程序

回帖推荐

teqel 发表于4楼  查看完整内容

因为J不是宏变量
沙发
pobel 在职认证  发表于 2015-10-8 10:16:45 |只看作者 |坛友微信交流群
如果在data test2; 那句之前加上%symdel n/nowarn;  那&n-1也就不可以了

使用道具

藤椅
pobel 在职认证  发表于 2015-10-8 10:22:13 |只看作者 |坛友微信交流群
这个例子中应该可以不用红变量吧。
call symput('n',dim(arr));这句直接改成 n=dim(arr);
然后把&符号都去掉试试看。

使用道具

板凳
teqel 发表于 2015-10-8 11:23:09 |只看作者 |坛友微信交流群
因为J不是宏变量

使用道具

报纸
木叶知秋 发表于 2015-10-8 14:55:48 |只看作者 |坛友微信交流群
明白了 自己搞混了 哈哈~

使用道具

地板
木叶知秋 发表于 2015-10-8 15:01:19 |只看作者 |坛友微信交流群
pobel 发表于 2015-10-8 10:16
如果在data test2; 那句之前加上%symdel n/nowarn;  那&n-1也就不可以了
对的 应该是之前残留的宏变量n 重新运行&n也提示错误了 我就说callsymput应该不能直接引用的~

使用道具

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

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

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

GMT+8, 2024-4-27 12:43