从年份中提取数字并连接
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.));
我有变量 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.));