PROC SQL/ Переменные в макросе SAS игнорируются

У меня есть макрос ниже PARAMETERS, который присваивает значения пяти переменным и создает таблицу MD_WRK.SUB_ID. Моя проблема в том, что код внутри макроса работал нормально, пока я не поместил его в макрос. Теперь переменные не заполняются, а PROC SQL для создания таблицы не выполняется. Когда я удаляю "%MACRO", цвета PROC SQL меняются, чтобы указать, что это правильно, но когда внутри макроса они неактивны. Я не могу понять, почему код в макросе становится недействительным.

%MACRO PARAMETERS;
%GLOBAL FDMVAR1 FDMVAR2 UPBOUND LOBOUND GROUPVAR;
    %LET FDMVAR1 ='31Mar2017:0:0:0'dt; /* Start Date */
    %LET FDMVAR2 = '30Apr2017:0:0:0'dt; /* End Date */
    %LET UPBOUND = .01;
    %LET LOBOUND = -.01;
    %LET GROUPVAR = 1;

    PROC SQL;
        CREATE TABLE MD_WRK.SUB_ID
            (SUBSYS_ID char(6));
        INSERT INTO MD_WRK.SUB_ID
            VALUES('CBS')
            VALUES('CDS')
            VALUES('DDA')
            VALUES('IMCOR')
            VALUES('ODL')
            VALUES('OEC')
            VALUES('OEC2')
            VALUES('SAV')
            VALUES('PWRCDS')
            VALUES('SMARTY')
            VALUES('MRKTLN')
        ;
        QUIT;
%MEND PARAMETERS;

1 ответ

Когда вы говорите "Изменение цветов PROC SQL", если вы ссылаетесь на цвет кода, как показано в Enterprise Guide или каком-либо другом клиенте, который выполняет автоматическую раскраску синтаксиса, я бы просто проигнорировал раскраску. В окраске синтаксиса есть некоторые небольшие сбои, но обратите внимание, что эти цвета не являются частью кода, поэтому, даже если раскраска кода предполагает, что что-то может быть не так, она будет работать нормально, если синтаксис правильный.

Если вы включите options mprint; и вызвать ваш макрос, журнал должен показать, что набор данных MD_WRK.SUB_ID был создан (или дать вам сообщение об ошибке, объясняющее, почему он не был создан).

Как упомянул @Reeza, макропеременные, которые вы создаете, вероятно, создаются как локальные макропеременные, поэтому они не будут существовать вне макроса. Если вы объявите их как% global внутри макроса, они будут существовать вне макроса, потому что они будут храниться в глобальной таблице символов. Но обычно есть лучшие подходы, чем полагаться на глобальные макропеременные.

Другие вопросы по тегам