从年份和连接中提取数字

时间:2016-11-29 18:44:18

标签: sas sas-macro

我有变量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在模数除法中消失了,我不确定为什么那个时期不存在。我相信我必须采取一些方法将数字转换为字符并执行子字符串。我该怎么做这个任务?

1 个答案:

答案 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.));