Formatting your code and question so we can properly read it is very helpful.
You're misisng the % on the last SYSFUNC call.
This works for me, note I changed ID to DSID to avoid any confusion between the ID variable and the ID macro variable.
data fname;
length id $2 name $10;
input id $1-2 name $4-14;
cards;
aa TJC
;;
run;
options mprint symbolgen;
%macro loopthrulst(list=);
%let dsid=%sysfunc(open(&list));
%let nobs = %sysfunc(attrn(&dsid, NOBS));
%syscall set(dsid);
%do i=1 %to &nobs;
%let rc = %sysfunc(fetchobs(&dsid, &i));
%put # # # Display ORG name: &name # # #;
%end;
%let rc2=%sysfunc(close(&dsid));
%mend;
%loopthrulst(list=fname);
@nnl3256 wrote:
There is data step and a table named fname is created. It is used in a macro. At end of the macro table is closed. When I rerun data step with modification in the same session, the table cannot be accessed. The error message: "ERROR: You cannot open WORK.FNAME.DATA for output access with member-level control because WORK.FNAME.DATA is in use by you in resource environment DMS Process." How can I re-use this table after the macro is completed? SAS code: data fname ; length id $2 name $10; input id $1-2 name $4-14; cards; aa TJC ;; run; %macro loopthrulst(list=); %let id=%sysfunc(open(&list)); %let NObs=%sysfunc(attrn(&id,NOBS)); %syscall set(id); %do i=1 %to &NObs; %let rc=%sysfunc(fetchobs(&id,&i)); %put # # # Display ORG name:&name # # #; %end; %let rc2=sysfunc(close(&id)); %mend; %loopthrulst(list=fname);
The error message you show typically means that you have some sort of view of the data set open. Either the data portion in VIEWTABLE or perhaps the column or properties view. That will need to be closed before other use. The "DMS Process" mentioned is the SAS Display Manager or the "Base SAS" or "Foundation SAS" program. If the data set is open that will cause the Open function to fail and return the error message.
Your code will be more readable if you copy from the SAS editor and paste into a code box opened with either the {I} or "running man" icon.
Formatting your code and question so we can properly read it is very helpful.
You're misisng the % on the last SYSFUNC call.
This works for me, note I changed ID to DSID to avoid any confusion between the ID variable and the ID macro variable.
data fname;
length id $2 name $10;
input id $1-2 name $4-14;
cards;
aa TJC
;;
run;
options mprint symbolgen;
%macro loopthrulst(list=);
%let dsid=%sysfunc(open(&list));
%let nobs = %sysfunc(attrn(&dsid, NOBS));
%syscall set(dsid);
%do i=1 %to &nobs;
%let rc = %sysfunc(fetchobs(&dsid, &i));
%put # # # Display ORG name: &name # # #;
%end;
%let rc2=%sysfunc(close(&dsid));
%mend;
%loopthrulst(list=fname);
@nnl3256 wrote:
There is data step and a table named fname is created. It is used in a macro. At end of the macro table is closed. When I rerun data step with modification in the same session, the table cannot be accessed. The error message: "ERROR: You cannot open WORK.FNAME.DATA for output access with member-level control because WORK.FNAME.DATA is in use by you in resource environment DMS Process." How can I re-use this table after the macro is completed? SAS code: data fname ; length id $2 name $10; input id $1-2 name $4-14; cards; aa TJC ;; run; %macro loopthrulst(list=); %let id=%sysfunc(open(&list)); %let NObs=%sysfunc(attrn(&id,NOBS)); %syscall set(id); %do i=1 %to &NObs; %let rc=%sysfunc(fetchobs(&id,&i)); %put # # # Display ORG name:&name # # #; %end; %let rc2=sysfunc(close(&id)); %mend; %loopthrulst(list=fname);
It works by adding missing %. Thanks
Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.