SAS Macro: проверка макропеременной, если значение в таблице - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть две макропеременные:

  • runasofdate со значением '20190107'
  • process_weekend, которое будет либо 'Y', либо 'N'

Обе макропеременные взяты из конфигурационного файла Excel и назначены с помощью call symput.

Затем у меня есть таблица со списком местных праздников:

HOLIDAY_DESC  HOLIDAY_DATE
HOLIDAY1      20190101
HOLIDAY2      20190409
HOLIDAY3      20190418
HOLIDAY4      20190419
HOLIDAY5      20190501

Мне нужна помощь с кодированием макроса:

Если & runasofdate находится в столбце HOLIDAY_DATE таблицы HOLIDAY, то процесс прерывания
Иначе, если & runasofdate падает в выходные дни, а макрос process_weekend находится в 'N', а затем прерывать процесс
Остальное если & runasofdate выпадает на выходные и process_weekend = 'Y', тогда вызывать sas-программы (через% include)
Иначе, если & runasofdate падает в будний день, тогда вызывать sas-программы (через% include)

1 Ответ

0 голосов
/ 17 апреля 2020

Вы не предоставили достаточно информации, чтобы полностью вам помочь, но это может помочь вам начать работу.

data have;
    set holiday_date end=eof;
    retain flag 'Run';
    *for this comparison to be valid - make sure you have the same types in the comparison;

    if holiday_date=&runasofdate then
        flag='Abort';

    if eof and flag='Run' then
        do;

            if weekday(&runasofdate) in (1, 7) and &process_weekend='Y' then
                do;
                    call execute ('sas program here');
                end;
            else if weekday(&runasofdate) not in (1, 7) and &process_weekend='N' then
                do;
                end;
            else
                do;
                    call execute('sas program here');
                end;
        end;
run;

Приложение макроса содержит несколько примеров условных логик c. https://communities.sas.com/t5/SAS-Communities-Library/SAS-9-4-Macro-Language-Reference-Has-a-New-Appendix/ta-p/291716

...