@BruceBrad wrote:
Your last description sums it up. I don't know which column the named range will be referring to. I have now sorted out a work-around. A bit clunky, but I can rely on the range being just a single column, and so the imported datafile will only have one variable. Then I can use this code to pull out the name of the variable.
%macro FirstVName(data);
%* returns the name of the first variable in the file;
%let dsid = %sysfunc(open(&data,i));
%sysfunc(varname(&dsid,1))
%mend FirstVName;
Exactly. You can ask SAS to find the names once it has made the dataset.
For your example of making a series of datasets you could just use PROC CONTENTS or DICTIONARY.COLUMNS to get the information you need to generate the code.
For example you could generate DSNAME and RENAME strings from DICTIONARY.COLUMNS
proc sql;
create table varlist as
select memname as dsname length=32
, catx('=',name,'want') as rename length=65
from dictionary.columns
where libname='WORK' and memname like 'TABLE%'
and varnum=1
;
quit;
Then use that to generate the code:
data _null_;
set varlist end=eof;
if _n_=1 then call execute('proc datasets nolist lib=work;');
call execute(catx(' ','modify',dsname,';rename',rename,';run;'));
if eof then call execute('quit;');
run;
... View more