data text;
set sashelp.class end=no_more;
call symput('name',(trim(name)));
if no_more then call symput('count',_N_);
%put &name. &count.;
run;
%macro putloop;
%local i;
%do i=1 %to &count.;
%put name&i. is &&name&i;
%end;
%mend;
%putloop;
运行如上代码,结果正确,日志如下:
威廉 19
NOTE: 数值已转换为字符值,位置:(行:列)。
96:41
NOTE: 从数据集 SASHELP.CLASS. 读取了 19 个观测
NOTE: 数据集 WORK.TEXT 有 19 个观测和 5 个变量。
NOTE: “DATA 语句”所用时间(总处理时间):
实际时间 0.02 秒
CPU 时间 0.01 秒
NOTE: 宏 PUTLOOP 完成编译,没有错误,
11 条指令,188 个字节。
name1 is 阿尔弗雷德
name2 is 爱丽丝
name3 is 芭芭拉
name4 is 凯露
name5 is 亨利
name6 is 詹姆斯
name7 is 简
name8 is 雅妮特
name9 is aaa
name10 is 约翰
name11 is 乔伊斯
name12 is 茱迪
name13 is 罗伊斯
name14 is 玛丽
name15 is 菲利普
name16 is 罗伯特
name17 is 罗纳德
name18 is 托马斯
name19 is 威廉
将代码中%put name&i. is &&name&i;改为%put name&i. is &&name.&i.;
结果错误,日志如下:
威廉 19
NOTE: 数值已转换为字符值,位置:(行:列)。
124:41
NOTE: 从数据集 SASHELP.CLASS. 读取了 19 个观测
NOTE: 数据集 WORK.TEXT 有 19 个观测和 5 个变量。
NOTE: “DATA 语句”所用时间(总处理时间):
实际时间 0.02 秒
CPU 时间 0.01 秒
NOTE: 宏 PUTLOOP 完成编译,没有错误,
11 条指令,192 个字节。
name1 is 威廉1
name2 is 威廉2
name3 is 威廉3
name4 is 威廉4
name5 is 威廉5
name6 is 威廉6
name7 is 威廉7
name8 is 威廉8
name9 is 威廉9
name10 is 威廉10
name11 is 威廉11
name12 is 威廉12
name13 is 威廉13
name14 is 威廉14
name15 is 威廉15
name16 is 威廉16
name17 is 威廉17
name18 is 威廉18
name19 is 威廉19
&&name.&i.和&&name&i在编译和执行中有什么区别?还是其他的原因导致第二次结果错误?