*
; /* From: Stephen Dybas;Reply-To: Stephen Dybas Newsgroups: comp.soft-sys.sas Subject: SASTO123 Macro Date: Sat, 2 Sep 1995 20:41:12 EDT Message-ID: <199509030043.AA11076@gate.health.state.ny.us> This macro was pulled from the jse.stat.ncsu.edu SAS-L archive and posted just a few days ago. I was glad to get so here it is to those who missed it. */ %MACRO SASTO123 ( DATA= _LAST_ , OUT= OUT , DELIM=COMMA); * This macro is based on original work by Ian Whitlock; * based on an original concept and with fine tuning by Jay Jacob Wind; * Copyright 1994. You may use this macro and pass it to others freely.; * In the macro call, use DATA=something to point to other than _LAST_.; * Use OUT=filename or OUT='full.dataset.name'.; * Use DELIM=COMMA to create LOTUS 1-2-3 input, DELIM=TAB for EXCEL.; * Avoid data set variables beginning with double underscore; * in particular __NUMS __CHARS __NAME __I ; %IF &DELIM=COMMA %THEN %DO; DATA _NULL_; CALL SYMPUT('COMMA',','); %END; %IF &DELIM=TAB %THEN %DO; DATA _NULL_; CALL SYMPUT('COMMA','09'X); %END; OPTIONS MISSING=0; DATA _NULL_; FILE &OUT NOTITLES NOPRINT; SET &DATA; * Array must follow SET statement.; ARRAY __NUMS (*) _NUMERIC_; ARRAY __CHARS (*) _CHARACTER_; * Length must follow ARRAY statements.; LENGTH __NAME $ 8; * Prepare to write line the variable names.; IF _N_ = 1 THEN DO; PUT @; DO __I = 1 TO DIM ( __CHARS ); CALL VNAME ( __CHARS ( __I ) , __NAME ); PUT '"' __NAME +(-1) '"' "&COMMA" @; END; PUT +(-1) "&COMMA" @; DO __I = 1 TO DIM ( __NUMS ); CALL VNAME ( __NUMS ( __I ) , __NAME ); PUT '"' __NAME +(-1) '"' "&COMMA" @; END; PUT; END; * Write the variable names.; DO __I = 1 TO DIM ( __CHARS ); __CHARS ( __I ) = TRANSLATE ( __CHARS ( __I ) , "'" , '"' ); END; PUT @1 '"' ( __CHARS (*) ) ( $ +(-1) '"' "&COMMA" '"' ) +(-1) '" ' ( __NUMS (*) ) ( +(-1) "&COMMA" ); RUN; %MEND SASTO123; *