我有变量x = 2001.我想生成一个如下所示的字符串: " TEST0106.xls&#34 ;.该字符串中的01是2001的最后两位数,06是2006的最后两位数(x + 5)。
我目前的代码是:
%let x = 2001;
%let sub1 = %sysfunc(mod(&x, 100));
%let sub2 = %sysfunc(mod(&x+5, 100));
%let test = TEST&sub1&sub2.xls;
%put &test;
然而,这只是给了我" TEST16xls"因为0在模数除法中消失了,我不确定为什么那个时期不存在。我相信我必须采取一些方法将数字转换为字符并执行子字符串。我该怎么做这个任务?
答案 0 :(得分:3)
首先,您不需要使用模运算在宏变量中执行子字符串,一切都是文本,所以只需使用%substr
。
其次,您可以为%sysfunc
提供一个可选参数,告诉它如何格式化结果;使用z2
格式告诉它你想要什么。我认为离开模数在这里很方便,因为它确实给你这个选项。否则,如果您不想使用modulo,可以使用%sysfunc(putn(
。
第三,你需要另一个.
,因为第一个结束宏变量(技术上宏变量是&
到.
包括在内,除非它们碰到另一个对宏变量名无效的字符第一)。
%let x = 2001;
%let sub1 = %substr(&x,3,2);
%let sub2 = %sysfunc(mod(&x+5, 100),z2.);
%let test = TEST&sub1.&sub2..xls;
%put &test;
或
%let sub2 = %sysfunc(putn(&sub1.+5,z2.));