从年份中提取数字并连接

Extracting Digits from Year and Concatenation

我有变量 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 在模数除法中消失了,我不确定为什么句点不存在。我相信我必须采取一些方法将数字转换为字符并做一个子字符串。我将如何完成这项任务?

首先,宏变量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.));