*
;
/*
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;

*
;