我有变量x= 2001。我想要生成一个如下所示的字符串:"TEST0106.xls“。该字符串中的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消失在模除法中,我不知道为什么周期不存在。我相信我需要做一些方法,把数字转换成字符,然后做一个子字符串。我该如何完成这个任务呢?
发布于 2016-11-29 11:25:03
首先,您不需要使用模块化算法在宏变量land中执行子字符串,所有内容都是文本,所以只需使用%substr
。
其次,您可以给%sysfunc
提供一个可选的参数,告诉它如何格式化结果;使用z2
格式告诉它您想要什么。我认为离开模块在这里是很方便的,因为它确实给了你这个选项。否则,如果不想使用模块化,可以使用%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.));
https://stackoverflow.com/questions/40873425
复制相似问题