/**********************************************************************/ /*--------------------------------------------------------------+ | | | NAME: LISTFILE SASMACRO | | PURPOSE: To create a data set containing a list of files | | USAGE: LISTFILE , | | | | all parameters have defaults: | | filename = * | | filetype = * | | filemode = A | | dataset = LISTFILE | | | | the resulting data set contains three variables: | | FN type: character length: 8 | | FT type: character length: 8 | | FM type: character length: 2 | | | +--------------------------------------------------------------*/ /**********************************************************************/ parse arg fn ft fm xtra ',' dataset . if xtra ^= '' then do '++SASLOG ERROR: Invalid file specification' exit 24 end /**********************************************************************/ if fm = '' then fm = 'A' if ft = '' then ft = '*' if fn = '' then fn = '*' if dataset = '' then dataset = 'LISTFILE' /**********************************************************************/ typing = cmsflag('cmstype') address command 'MAKEBUF' 'SET CMSTYPE HT' 'LISTFILE' fn ft fm '(STACK' /**********************************************************************/ ret = rc if typing then 'SET CMSTYPE RT' address /**********************************************************************/ if ret ^= 0 then do '++SASLOG ERROR: Return code' ret 'from CMS LISTFILE' address command 'DROPBUF' exit ret end /**********************************************************************/ 'DATA' dataset ';' 'LENGTH FN FT $8 FM $2;' do i = 1 to queued() pull fn ft fm . 'FN = "' || fn || '";' 'FT = "' || ft || '";' 'FM = "' || fm || '";' 'OUTPUT;' end /**********************************************************************/ address command 'DROPBUF' 'RUN;' /**********************************************************************/ length fn ft selfile $ 8 fm $ 2 ; /**********************************************************************/ INIT: control label; /**********************************************************************/ submit continue; listfile * output a, work.outlist ; run; endsubmit; /**********************************************************************/ if exist('work.outlist') then dsid=open('work.outlist'); /**********************************************************************/ rc=filename('rept3','freq output a'). /**********************************************************************/ if dsid then do; call set(dsid); numobs=attrn(dsid,'nobs'); do i=numobs to 1 by -1; rc=fetchobs(dsid,i); rc=filename('rept'||i,fn||' '||ft||' '||fm); end; rc=close(dsid); end; else do; _msg_='A listing of files available could not be accessed.'; end; /**********************************************************************/ reportid=makelist(); /**********************************************************************/ cursor ask; return; /**********************************************************************/ ASK: rc=clearlist(reportid); refresh; call wregion(1,1,15,79,'cmdline'); call execcmd("setwname 'Reports Available'"); selfile=filelist('^ rlink','Select the desired report file',"N"); if selfile ne _blank_ then do; rc=fillist('fileref',selfile,reportid); call setrow(0,0,'','y'); end; ask=_blank_; return; /**********************************************************************/ GETROW: if _currow_ gt listlen(reportid) then call endtable(); else do; row=getitemc(reportid,_currow_); if substr(row,1,1)='1' then substr(row,1,1)=' '; end; return; /**********************************************************************/ PUTROW: return; MAIN: return; /**********************************************************************/ term: if reportid then rc=dellist(reportid,'y'); return; /**********************************************************************/