2016-11-29 2 views
1

У меня есть переменная 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 исчезает в разделе модуля, и я не знаю, почему период не существует. Я считаю, что мне нужно будет сделать какой-то подход, когда я преобразую числа в символы и сделаю подстроку. Как мне решить эту задачу?

ответ

3

Во-первых, вам не нужно использовать арифметику по модулю, чтобы выполнить подстроку в области переменных переменных, все это текст, поэтому просто используйте %substr.

Во-вторых, вы можете указать необязательный аргумент %sysfunc, рассказывая ему, как отформатировать результат; используйте формат z2, чтобы рассказать ему, что вы хотите. Я думаю, что оставить modulo удобно здесь просто потому, что он дает вам этот вариант. В противном случае вы можете использовать %sysfunc(putn(, если вы хотите не использовать modulo.

В-третий, вам нужно еще один ., так как первый один заканчивает макропеременную (технически Макропеременные & до . включительно, если они не ударили другой персонаж, который недопустим для имен Макропеременной первым).

%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.));