楼主: tailezhu2007
4768 8

[原创博文] 为什么这个打印的宏命令错误 [推广有奖]

  • 4关注
  • 0粉丝

本科生

70%

还不是VIP/贵宾

-

威望
0
论坛币
2 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1702 点
帖子
84
精华
0
在线时间
112 小时
注册时间
2010-10-20
最后登录
2013-3-16

楼主
tailezhu2007 发表于 2011-10-13 18:25:52 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
%let a1=sas.cd731 sas.gnsczz;
%macro print;
%let k=1
%let n=%scan(&a1,&k);
%do %while(&n ne);
proc print data=&a1;
run;
%let k=%eval(&k+1);
%let n=%scan(&a1,&k);
%end;
%mend;
%print
二维码

扫码加我 拉你入群

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

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

关键词:宏命令 print Macro while scan

沙发
tailezhu2007 发表于 2011-10-13 18:26:19
自己顶一个先

藤椅
wangyf0218 发表于 2011-10-13 18:53:01
这写的是啥。。。
缺了个分号,还有proc print data=&n吧,为啥是&a1。。。

板凳
tailezhu2007 发表于 2011-10-13 19:26:22
%let a1=sas.cd731; sas.gnsczz;
%macro print;
%let k=1
%let n=%scan(&a1, &k);
%do %while(&n ne);
proc print data=&n;
run;
%let k=%eval(&k+1);
%let n=%scan(&a1,&k);
%end;
%mend;
%print

你是说这样吗? 还是不对

报纸
tailezhu2007 发表于 2011-10-13 19:26:54
26   %let a1=sas.cd731; sas.gnsczz;
26   %let a1=sas.cd731; sas.gnsczz;
                        ----------
                        180
ERROR 180-322: 语句无效或未按正确顺序使用。

27    %macro print;
28    %let k=1
29    %let n=%scan(&a1, &k);
ERROR: 宏关键字 LET 显示为文本。可能缺失分号或其他分隔符。
30    %do %while(&n ne);
31    proc print data=&n;
32    run;
33    %let k=%eval(&k+1);
34    %let n=%scan(&a1,&k);
35    %end;
36    %mend;
37    %print
WARNING: 没有解析符号引用 N。
ERROR: 在需要数值操作数的 %EVAL 函数或 %IF 条件中发现字符操作数。条件是: &n ne
ERROR: %DO %WHILE 循环中的条件 &n ne 生成无效或缺失值 ,宏将终止执行。
ERROR: 宏 PRINT 将终止执行。

地板
tailezhu2007 发表于 2011-10-13 19:29:26
这是报错

捕获.PNG (10.5 KB)

捕获.PNG

7
456852 发表于 2011-10-13 21:03:00
首先程序第三行%let k=1之后缺了一个分号。
其次,程序第一行,%let a1=sas.cd731; sas.gnsczz;
这句话里面sas.gnsczz怎么可以单独拿出来放在两个分号中间?你不知道分号的作用么?
还有,你究竟是想给a1赋什么值啊?

8
tj0412ymy 发表于 2011-10-13 21:18:02
程序不长,漏洞很多,帮LZ修改了一下,希望能管用!
  1. %let a1=%quote(sas.cd731; sas.gnsczz);
  2. %macro print;
  3. %let k=1;
  4. %let n=%scan(&a1,&k);
  5. %do %while(&n ne);
  6. proc print data=&n;
  7. run;
  8. %let k=%eval(&k+1);
  9. %let n=%scan(&a1,&k);
  10. %end;
  11. %mend;
  12. %print;
复制代码
对SAS和统计方面感兴趣的朋友,请加SAS学习和认证讨论群:169157207。欢迎在群上讨论!

9
tailezhu2007 发表于 2011-10-17 17:41:14
456852 发表于 2011-10-13 21:03
首先程序第三行%let k=1之后缺了一个分号。
其次,程序第一行,%let a1=sas.cd731; sas.gnsczz;
这句话里 ...
我可能打的时候打错了
添上k=1分号  去掉第一行的分号
我的本意是 打出两个数据集 一个名为cd731  一个名为gnsczz 都是sas逻辑库里的数据。

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-2 11:08