- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
I'm working on a SAS program that runs a coordinate descent algorithm which repetitively processes & updates dataset variables inside a macro loop:
%macro test(dataset=, numvars=, numiter=, lambda=, alpha=);
%do i=1 %to &numiter;
%do j=1 %to &numvars;
data &dataset (keep=y x1-x&numvars);
set &dataset end=end_data;
array x[&numvars] x1-x&numvars;
< ... Code for variable manipulations & calculations ...>
run;
%end;
%end;
%mend;
%test(dataset=&dataset, numvars=10, numiter=100, lambda=.1, alpha=1)
I wrote this code out of convenience, realizing that putting a data step inside the macro loop isn't terribly efficient since opening and closing the same dataset eats up CPU resources.
Is there a better way to code this algorithm that will save significant time when running?
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
In part, that depends on the calculations. It is extremely likely you could recode along these lines:
data &dataset;
set &dataset end=end_data;
array x ...;
do _i_=1 to &numiter;
do _j_=1 to &numvars;
** calculate, possibly exactly as before;
end;
end;
run;
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
In part, that depends on the calculations. It is extremely likely you could recode along these lines:
data &dataset;
set &dataset end=end_data;
array x ...;
do _i_=1 to &numiter;
do _j_=1 to &numvars;
** calculate, possibly exactly as before;
end;
end;
run;