Sean
Sean

Reputation: 1120

Running specified lines of a SAS program

Assume I have this program:

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

and I want to add two lines to it, one that runs lines 1-3 of the program, and another that runs line 5.

The second example here suggests that %include may be what I'm looking for, but %include 1-3 and %include 5 do not work. %include [path] 1-3 gets me into an infinite loop, which is undesirable.

What is the best way to accomplish this? Thanks!

Upvotes: 0

Views: 1362

Answers (3)

Reeza
Reeza

Reputation: 21264

A single extra return could screw up your line references...If you need to add a header, or a new line of code somewhere or something are you willing to go back and fix all your line number references?

I recommend using the macro or %include options.

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

%mend;

%repeat_code

For the %include you can create the lines inside a new file and then reference them in your code with a %include.

Depending on what those lines are actually doing, you may have other options. For example if it's a lookup or re-coding a variable I would use a format instead.

Upvotes: 0

user4962951
user4962951

Reputation:

Macros, perhaps?

%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);

You could feed macro variables into the process from a dataset rather than multiple macro calls. See the examples starting on p 11 here: First & Ronk, SGI 130-30, SAS® Macro Variables and Simple Macro Programs

Upvotes: 0

data _null_
data _null_

Reputation: 9109

EDIT: this only works for lines that have previously been submitted.

You need SPOOL option. I used RESETLINE statement to reset the line number useful when using SAS/EG. I would like to know how you intend to use it.

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

%put Hello world;

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

enter image description here

Upvotes: 3

Related Questions