LISTSERV at the University of Georgia
Menubar Imagemap
Home Browse Manage Request Manuals Register
Previous messageNext messagePrevious in topicNext in topicPrevious by same authorNext by same authorPrevious page (February 2002, week 3)Back to main SAS-L pageJoin or leave SAS-L (or change settings)ReplyPost a new messageSearchProportional fontNon-proportional font
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)
Comments: To: Edward Heaton <HEATONE@WESTAT.COM>
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.


Back to: Top of message | Previous page | Main SAS-L page