user3658367
user3658367

Reputation: 641

explain what is happening in Proc Sql

 select Name into :Dataset1-:Dataset%trim(%left(&DatasetNum)) from MEM;

I am not able to interpret what is happening here in this statement can anyone give me an explanation. I understand this stament

select count(Name) into :DatasetNum from MEM

But not the above one.

Upvotes: 1

Views: 95

Answers (2)

Tom
Tom

Reputation: 51621

It is attempting to use the value of the macro variable DATASETNUM as the upper bound on the macro variable names that are being created by the SELECT statement. Because the previous variable was created with leading spaces the %LEFT() macro is called to remove them. The call to the macro %trim() is not needed as trailing spaces would not cause any trouble.

It is much easier to just build the macro variable array first and then set the counter variable from the value of the automatic macro variable SQLOBS. Plus then it will not have the leading blanks.

select name into :Dataset1- from mem ;
%let DatasetNum=&sqlobs;

If you have an older version of SAS that doesn't support the new :varname- syntax then just use a large value for the upper bound. SAS will only create the number of macro variables it needs.

select name into :Dataset1-:Dataset99999 from mem;

Upvotes: 3

Allan Bowe
Allan Bowe

Reputation: 12701

This is creating an array of SAS macro variables (DATASET1, DATASET2, DATASET3) etc, populated from the Name column of the MEM dataset.

It is analagous to:

data _null_;
  set MEM;
  call symputx(cats('Dataset',_n_),Name);
run;

Upvotes: 1

Related Questions