2016-11-29 21 views
1

我有一個變量x = 2001.我想生成一個如下所示的字符串: 「TEST0106.xls」。該字符串中的01是2001的最後兩位數字,06是2006(x + 5)的後兩位數字。從Year和Concatenation中提取數字

我當前的代碼是這樣的:

%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消失在模數師,我不知道爲什麼期內不存在。我相信我將不得不做一些方法,將數字轉換爲字符並執行子字符串。我將如何去做這個任務?

回答

3

首先,您不需要使用模算術在宏可變土地中做一個子字符串,一切都是文本,所以只需使用%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.));