DATA Step, Macro, Functions and more

Call execute failes

Reply
Regular Contributor
Posts: 229

Call execute failes

Hello again,

next problem is I pass a filereference in a call execute, but I get an error:

When I pass for example the fileid and uncomment the first part and comment the second part in the macro then it works!

So i could pass the fileid and get the fileref from dataset files as well, but i would like to pass the fullfilename.

Filepath Looks like: (it works when i just pass that to the macro)

/imc/other/osp/wom/ExportedMeasurements1_data.txt

%macro ReadFiles(fullfilename);
/*
data test&fileid;
set files;
where fileid = &fileid;
run;
*/
%if %sysfunc(fileexist(&fullfilename)) %then %do;
%put The external file &fullfilename does exist.;

%end;
%else %do;
   %put Error &fullfilename;
%end;
%mend;

data _null_;
format fullfile $200.;
set files;
if fullfile ne '' then call execute ("%ReadFiles("||trim(fullfile)||");");
run;

i also tried with strip and compress but always get this kind of error:

Error "||trim(fullfile)||" (so it does not existis and it prints Error &fullfilename

Super Contributor
Posts: 376

Call execute failes

This is just a guess but try putting '%ReadFiles(' in single quotes.  My guess is %ReadFiles is getting expanded during the compilation of the data step, and the resolved code is getting call executed.  You want to mask the expansion of %ReadFiles, so it is just a macro code with your desired parameter when call executed.

HTH...

Frequent Contributor
Frequent Contributor
Posts: 94

Call execute failes

Was going to suggest the same thing.  The online documention explaines the difference: http://support.sas.com/documentation/cdl/en/mcrolref/61885/HTML/default/viewer.htm#a000543697.htm

Respected Advisor
Posts: 3,777

Call execute failes

Many times perhaps most of the time you will also want to delay execution of the MACRO until after the data step is done using   %NRSTR

call execute('%nrstr(%ReadFiles('||trim(fullfile)||'));');

Regular Contributor
Posts: 229

Call execute failes

thanks all for your replies, do any of you guys know of it is possible to call execute from within a macro?

%macro ReadFiles(fullfilename,name,curve,dark);
%if "&curve" eq "Y" and "&DARK" eq "N" %then %do;
proc import datafile=&fullfilename
     out=&name
     dbms=dlm
     replace;
     delimiter='09'x;
     datarow=2;
run;

Proc contents data = &name out = temp_&name varnum;   run;
data temp_&name;
set temp_&name(keep=name varnum);
run;

proc sort data=temp_&name;
by varnum;
run;

data temp_&name;
set temp_&name;
if  mod(_n_,2) =1 then count+1;
run;

data test_&name;
set temp_&name;
by count;
length list $ 100;
retain list;
if first.count then do;
                     flag+1;
                     call missing(list);
                     end;
list=catx(' ',list,name);
A = scan(list,1);
B = scan(list,2);
if last.count and B ne '' then do;
call execute ("%AppendCurve("||strip(flag)||","||strip(A)||","||strip(B)||","||strip(list)||");");
end;
run;

%end;
%if "&curve" eq "N" and "&DARK" eq "N" %then %do;
proc import datafile=&fullfilename
     out=&name
     dbms=dlm
     replace;
     delimiter='09'x;
     datarow=3;
run;

data &name( drop=Run_Id Device rename=(VAR25=Slope_Voc));
format Curve_Id;
set &name;
run;

proc append base=Edc_wacom data=&name force; run;

data edc_wacom;
set edc_wacom;
Curve_id = _N_;
run;

%end;
%mend;

Respected Advisor
Posts: 3,777

Re: Call execute failes

If you're asking what wrong with this macro it's the same thing double quotes. Plus you probably want %NRSTR

call execute ('%NRSTR(%AppendCurve('||strip(flag)||","||strip(A)||","||strip(B)||","||strip(list)||"));");

Ask a Question
Discussion stats
  • 5 replies
  • 155 views
  • 0 likes
  • 4 in conversation