2016-03-28 2 views
0

Предположим, у меня есть эта программа:Выполнение указанных строк программы SAS

1 data temp; 
2 set _null_; 
3 run; 
4 
5 %put Hello world; 

, и я хочу, чтобы добавить две строки в нем, тот, который проходит 1-3 строки программы, а другой, который проходит линия 5 .

Второй пример here предполагает, что% include может быть тем, что я ищу, но% include 1-3 и% include 5 не работают. % include [path] 1-3 приводит меня в бесконечный цикл, что нежелательно.

Каков наилучший способ для этого? Благодаря!

+0

% содержит, как правило, ссылки на внешний файл. Я не уверен, что есть способ сделать то, что вы пытаетесь сделать. Можете ли вы объяснить пример использования? – Reeza

+0

Существует большой фрагмент кода, который мне нужно повторно запустить несколько раз и искал более простой способ его запуска, чем выделение всего (петли в этом сценарии не работают). Я могу представить, что это имело и другие виды использования, но это было моим намерением. – superfluous

ответ

3

EDIT: это работает только для линий, которые были ранее отправлены.

Вам нужна опция SPOOL. Я использовал оператор RESETLINE для сброса номера строки, полезного при использовании SAS/EG. Я хотел бы знать, как вы собираетесь его использовать.

options spool=1; 
resetline; 
data temp; 
    set _null_; 
    run; 

%put Hello world; 

%include 1-3/source2; 
%include 5/source2; 

enter image description here

+1

заявление о сбросе - хорошо! –

+0

Ну ладно, возможно, это только возможность SAS EG. Любая идея, если что-то может быть разработано для базы SAS? – superfluous

+0

@superfluous Это базовый SAS, запущенный в пакетном режиме. EG - всего лишь податель. Причина, по которой я упомянул ЭГ, состоит в том, что она представляет строки кода, поэтому я сделал линию сброса. –

0

Макросы, возможно?

%macro one(datasetname=); 
data &datasetname; 
set _null_; 
run; 
%mend one; 

%macro two(textstring=); 
%put &textstring; 
%mend two; 

%one(datasetname= temp1); 
%two(textstring= Hello world); 

%one(datasetname= temp2); 
%two(textstring= Hello new world); 

Вы можете передавать макропеременные в процесс из набора данных, а не из нескольких вызовов макросов. См. Примеры, начинающиеся на стр. 11 здесь: First & Ronk, SGI 130-30, SAS® Macro Variables and Simple Macro Programs

0

Один дополнительный возврат может испортить ваши ссылки на линии ... Если вам нужно добавить заголовок или новую строку кода где-нибудь или что-то, вы готовы пойти назад и исправить все ссылки на номера строк?

Я рекомендую использовать опции macro или %include.

%macro repeat_code(); 
    ***sas code goes here; 

%mend; 

%repeat_code 

Для %include вы можете создать линии внутри новый файл, а затем ссылаться на них в коде с %include.

В зависимости от того, что эти линии действительно делают, у вас могут быть другие варианты. Например, если это пересмотр или перекодирование переменной, я бы использовал формат.

Смежные вопросы