Я провел круги на этом в течение 1,5 часов, поэтому я ухожу и прошу помочь здесь. То, что я пытаюсь сделать, просто мертво, но я не могу для жизни меня найти ссылку, описывающую этот процесс.Как получить числовое значение аргумента макроса, установленного на шаге данных
У меня есть следующий шаг данных:
data _null_;
some_date = "01JAN2000"D;
call symput('macro_input_date',left(put(some_date),date9.)));
%useful_macro(¯o_input_date);
run;
где значение даты передается функции макроса (Я новичок в них). Я хотел бы использовать числовое значение значения даты - давайте будем дикими и скажем, что хочу получить значение года, умножить его на значение дня и вычесть остаток после деления значения месяца на 3. Я могу Кажется, что из входных данных получается только значение года. Я пробовал различные вещи, такие как
symget
, как «голые» и предваряются «%», с аргументами, которые представляют все возможные перестановки следующих вариантов:- имеют голую ссылку на переменная, например macro_input_date
- заключить в одинарные кавычки, например. 'macro_input_date'
- заключить в двойные кавычки, например. msgstr "0". & macro_input_date
- прямой призыв к
%sysfunc(year(<argument as variously specified above>)
Может кто-нибудь сказать мне, что мне не хватает?
Спасибо!
Что вы пытаетесь сделать что вам нужно перейти к макропеременной и отступить? Нужно больше информации. В противном случае основной ответ заключается не в этом ... Что такое «полезная функция макросов»? То, как вы это указали, не является макрофункцией (они должны быть на правой стороне знака равенства). – Joe
Является ли ваша проблема только одним из сроков? Переместите оператор 'RUN;' перед вызовом '% useful_macro()', если вы хотите, чтобы макрос использовал значение, вызываемое 'вызывающим symput()'. – Tom
@Joe, вы правы, я должен был присвоить значение. По сути, я использую GUI (DI) и хочу преобразовать, например, значения даты в соответствующее целочисленное представление (например, 20000101). Это достаточно легко сделать с шагом данных, но я хочу быть эффективным и делать это в преобразовании, которое уже выполняет итерацию через данные. С ограничениями GUI это означает, что выражения для перетаскивания * и * используются с двумя преобразованиями. Чтобы упорядочить повторяющийся процесс, я хочу создать функцию, которая может быть вызвана из преобразований графического интерфейса. Вы видите превосходный подход? Благодаря! – Rookatu