INIT: dsid=open('sasuser.houses'); vars=makelist(); poss=makelist(); fmts=makelist(); nvar=attrn(dsid, 'nvars'); pos=1; do i=1 to nvar; varname=varname(dsid, i); vartype=vartype(dsid, i); varlen=varlen(dsid, i); varfmt=varfmt(dsid, i); wid=0; start=indexc(varfmt,'0123456789'); end=index(varfmt,'.'); if(start & end) then wid=input( substr(varfmt,start,end-start),3.); if wid=0 then wid=max( length(varname), varlen ); if wid=0 | wid=. then wid=8; if (vartype='C') then vartype='CHAR'; else vartype='NUM'; rc=setnitemc(vars, vartype, varname); rc=setnitemc(fmts, varfmt, varname); rc=setitemn(poss, pos, i, 'y'); substr(temphead, pos) = varname; pos=pos+wid+1; end; call notify('table', '_set_maxcol_', pos); return; GET1: if (fetchobs(dsid, _currow_)) then call notify('table', '_endtable_'); else do; do i = 1 to nvar; vartype=getitemc(vars, i); varname=nameitem(vars, i); pos=getitemn(poss, i); varfmt=getitemc(fmts, i); if (vartype='CHAR') then do; valuec=getvarc(dsid, i); if varfmt^='' then do; valuec=putc(valuec, varfmt); end; substr(tempvar, pos)=valuec; end; else /* vartype='NUM' */ do; valuen=getvarn(dsid, i); if varfmt^='' then do; valuec=putn(valuen,varfmt); substr(tempvar, pos)=valuec; end; else substr(tempvar, pos)=valuen; end; end; varline=substr(tempvar , _curcol_); if _status_='G' then headline=substr(temphead , _curcol_); end; return; TERM: call close(dsid); return;