2015-10-02 3 views
0

Я использую runSASJob для запуска программ SAS в среде UNIX.Командная строка SAS - выполнение частичной программы

Мне было интересно, есть ли способ выполнить часть программы SAS из командной строки.

Например, у меня есть программа SAS со 100 строками, и в этой программе есть шаг данных, который занимает линии 5-10.

Могу ли я запускать строки 5-10 только из командной строки?

Благодаря

ответ

0

следующий макрос должен решить эту проблему, и некоторые из них аналогичные:

%macro runMacroFromEnv 
/des='Set the environment value RUNMACRO to run a macro'; 
    %if %sysfunc(envlen(RUNMACRO)) > 0 %then %sysget(RUNMACRO); 
%mend; 

Например: если у вас есть следующий файл:

%macro foo; 
    %put I just ran foo; 
%mend; 

%macro runMacroFromEnv 
/des='Set the environment value RUNMACRO to run a macro'; 
    %if %sysfunc(envlen(RUNMACRO)) > 0 %then %sysget(RUNMACRO); 
%mend; 

%runMacroFromEnv; 

и вызывать SAS с:

sas runMacro.sas -set RUNMACRO %foo 

Тогда где-то в журнале, вы увидите:

I just ran foo 

A пара важных деталей:

  • Использование -set работ (по крайней мере) в Unix и Windows,
  • Существуют и другие механизмы для установки переменных окружения, в зависимости от оболочки
  • Не забывайте % в -set RUNMACRO %foo
  • См The set system option для более подробной информации
1

Существуют различные варианты доступны для вас:

  1. Сплит из 5 линий интересов в отдельный файл, а затем заменить их с% включают заявление в исходной программе 100-линии
  2. Как указано выше, но с использованием макроса автозаполнения или сохраненного скомпилированного макроса
  3. Напишите шаг данных, который принимает 100-строчный .sas-файл в качестве входных данных, выводит только 5 строк, которые вы хотите, и% включите его - полезно, если вы не имеют права на запись файл, из которого вы хотите запустить 5 строк, и вы не хотите сохранять отдельную копию.
  4. Если вы уже выполнили всю 100-строчную программу в том же сеансе, устанавливается option spool, и вы знаете, какая строка номера содержит 5 желаемых строк, занятых в журнале, вы можете воспроизвести эти строки с помощью инструкции %include.

Для варианта 3, шаг выборки данных может выглядеть следующим образом:

%let SHORTFILE = %sysfunc(pathname(work))/shortfile.sas; 

data _null_; 
    infile "/path/to/100/line/file.sas" obs = 10 firstobs=5 lrecl = 32767; 
    file "&SHORTFILE" lrecl= 32767; 
    input; 
    put _infile_; 
run; 

%include "&SHORTFILE"; 

Если вы чувствуете себя храбрым, и вы действительно не хотите, чтобы создать дополнительный временный файл, вы можете использовать вызов выполнить, чтобы сделать это вместо:

data _null_; 
    infile "/path/to/100/line/file.sas" obs = 10 firstobs=5 lrecl = 32767; 
    input; 
    call execute(_infile_); 
run; 
Смежные вопросы