Date: Tue, 19 Feb 2002 11:53:44 +0100
Reply-To: Jim Groeneveld <J.Groeneveld@ITGROUPS.COM>
Sender: "SAS(r) Discussion" <SAS-L@LISTSERV.UGA.EDU>
From: Jim Groeneveld <J.Groeneveld@ITGROUPS.COM>
Subject: Re: char-->num (but not changing the variable names)
Content-Type: text/plain
Dear Edward and Jen,
Another Q&D (without checks on valid parameters) macro is the following:
%MACRO aRecodeN (SourceDs, TargetDs, VarList, OldVList, NewVList);
%LOCAL I J Variable OldValue NewValue VarLabel VarFmt VarInFmt;
PROC CONTENTS DATA=&SourceDs OUT=Contents (KEEP=Name Label Format
InFormat) NOPRINT; RUN;
/*proc print data=contents; run;*/
%LET I = 1;
%LET Variable = %SCAN (&VarList, &I, %STR( ));
%DO %WHILE (&Variable NE);
DATA _NULL_;
SET Contents;
IF (UPCASE(Name) EQ UPCASE("&Variable")) THEN
DO;
CALL EXECUTE ( '%LET VarLabel = ' || Label || ';' );
CALL EXECUTE ( '%LET VarFmt = ' || Format || ';' );
CALL EXECUTE ( '%LET VarInFmt = ' || InFormat || ';' );
END;
RUN;
DATA Scratch (DROP=&Variable);
LENGTH &Variable $5;
SET &SourceDs;
%LET J = 1;
%LET OldValue = %SCAN (&OldVList, &J, %STR( ));
%LET NewValue = %SCAN (&NewVList, &J, %STR( ));
%DO %WHILE (&OldValue NE); %* Assuming equal number of new values;
%IF (&J NE 1) %THEN ELSE;
IF (&Variable EQ "&OldValue") THEN &Variable = "&NewValue";
%LET J = %EVAL (&J + 1);
%LET OldValue = %SCAN (&OldVList, &J, %STR( ));
%LET NewValue = %SCAN (&NewVList, &J, %STR( ));
%END;
Numeric_ = INPUT (&Variable, BEST12.);
* DROP &Variable;
RUN;
DATA &TargetDs;
SET Scratch (RENAME=(Numeric_=&Variable));
* RENAME Numeric_ = &Variable;
* Corresponding numeric formats, to be associated, have to be created by
hand;
ATTRIB &Variable LABEL = "&VarLabel"
%IF (&VarFmt NE) %THEN
%DO;
%IF (%SUBSTR(&VarFmt,1,1) EQ %STR($)) %THEN FORMAT =
%SUBSTR(&VarFmt, 2).;
%ELSE
%DO;
%PUT Macro ArecodeN - WARNING: Illegal character format &VarFmt
for variable=&Variable;
%PUT Format association lost;
%END;
%END;
%IF (&VarInFmt NE) %THEN
%DO;
%IF (%SUBSTR(&VarInFmt,1,1) EQ %STR($)) %THEN INFORMAT =
%SUBSTR(&VarInFmt, 2).;
%ELSE
%DO;
%PUT Macro ArecodeN - WARNING: Illegal character informat
&VarInFmt for variable=&Variable;
%PUT Informat association lost;
%END;
%END;
;
RUN;
%LET I = %EVAL (&I + 1);
%LET Variable = %SCAN (&VarList, &I, %STR( ));
%END;
PROC DATASETS; DELETE Contents; RUN;
%MEND aRecodeN;
Regards - Jim.
--
Y. (Jim) Groeneveld, MSc IMRO TRAMARKO tel. +31 412 407 070
senior statistician, P.O. Box 1 fax. +31 412 407 080
senior data manager 5350 AA BERGHEM IMRO TRAMARKO: a CRO
J.Groeneveld@ITGroups.com the Netherlands in clinical research
As time elapses it is getting later.
Notice of confidentiality: this e-mail may contain confidential information
intended for the addressed recipient only.
If you have received this e-mail in error please delete this e-mail and
please notify the sender so that proper delivery
can be arranged.