%macro getattribs( dsn ) ; %if %sysfunc( exist( &dsn ) ) %then %do ; %let dsn = %upcase( &dsn ) ; %if %index( &dsn, . ) %then %do ; %let libname = %scan( &dsn, 1, . ) ; %let memname = %scan( &dsn, 2, . ) ; %end ; %else %do ; %let libname = WORK ; %let memname = &dsn ; %end ; data _null_ ; length line $512 ; put / "Attributes of data set: &dsn" // 'attrib' ; do until( eof ) ; set sashelp.vcolumn end = eof ; where libname = "&libname" and memname = "&memname" ; line = cat( strip( name ) , ' length = ', ifc( type = 'char', '$', '' ), strip( put( length, 5. ) ) , ifc( missing( label ), ' ', cat( ' label = "', strip( label ), '" ' ) ) , ifc( missing( informat ), ' ', catx( ' ', ' informat =', informat ) ), ' ' , ifc( missing( format ), ' ', catx( ' ', ' format =', format ) ) ) ; put +2 line ; end ; put ';' ; stop ; run ; %end ; %else %put NOTE: Data set &dsn does not exist. ; %mend ;%getattribs( sashelp.cars )
Attributes of data set: SASHELP.CARS attrib Make length = $13 Model length = $40 Type length = $8 Origin length = $6 DriveTrain length = $5 MSRP length = 8 format = DOLLAR8. Invoice length = 8 format = DOLLAR8. EngineSize length = 8 label = "Engine Size (L)" Cylinders length = 8 Horsepower length = 8 MPG_City length = 8 label = "MPG (City)" MPG_Highway length = 8 label = "MPG (Highway)" Weight length = 8 label = "Weight (LBS)" Wheelbase length = 8 label = "Wheelbase (IN)" Length length = 8 label = "Length (IN)" ; NOTE: There were 15 observations read from the data set SASHELP.VCOLUMN. WHERE (libname='SASHELP') and (memname='CARS');
Thursday, June 7, 2012
GetAttribs( dsn )
If you ever need to add a column in the middle of a SAS data set it can be problematic since the program data vector (PDV) controls the order. As a result, I wrote the below macro to expedite the process by writing column attributes to the SAS log. From there I can review then copy and paste the content into a new program.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment