Date: Thu, 14 Oct 2010 11:29:28 -0400
Reply-To: Mike Rhoads <RHOADSM1@WESTAT.COM>
Sender: "SAS(r) Discussion" <SAS-L@LISTSERV.UGA.EDU>
From: Mike Rhoads <RHOADSM1@WESTAT.COM>
Subject: Re: Formating the Visits ??
Content-Type: text/plain; charset="us-ascii"
As a clarification (and before anyone asks), the old faithful TRANWRD function will produce the same results. Although the "WRD" in the function name somewhat misleadingly suggests that it is working with "words", which is what led me away from it initially, it in fact is also dealing just with substrings.
The only difference between the two functions turns out to be that TRANSTRN allows a true zero-length replacement string (if TRIMN('') is the 3rd argument), while TRANWRD will instead replace the target with a single blank in this situation.
Mike
[previous message]
You can do this sort of conversion using either an informat with the INPUT function, or a format with the PUT function. You were halfway in the middle, so switching to "value" in PROC FORMAT as Sterling suggests fixes things by making it a pure-format approach.
Given that your input data are so regular, I probably would have implemented the coding scheme itself, rather than the results, in SAS code. The new TRANSTRN function in SAS 9.2 would be a good approach, although there are certainly other possibilities (such as regular expressions).
data test;
set lbtest;
length short $ 10 tempvar $ 60;
drop tempvar;
tempvar = long;
tempvar = transtrn(tempvar,'BASELINE','BASE');
tempvar = transtrn(tempvar,'CYCLE','C');
tempvar = transtrn(tempvar,'DAY 1: DAY 1','DAY 1');
tempvar = transtrn(tempvar,'DAY','D');
tempvar = transtrn(tempvar,'HOURS','H');
tempvar = transtrn(tempvar,'HOUR','H');
tempvar = transtrn(tempvar,'BEFORE DOSING','B');
short = compress(tempvar,' ,');
run;
Mike Rhoads
RhoadsM1@Westat.com
-----Original Message-----
From: SAS(r) Discussion [mailto:SAS-L@LISTSERV.UGA.EDU] On Behalf Of Sterling Paramore
Sent: Wednesday, October 13, 2010 7:24 PM
To: SAS-L@LISTSERV.UGA.EDU
Subject: Re: Formating the Visits ??
Change "invalue" to "value"
On Wed, Oct 13, 2010 at 4:15 PM, SAS_learner <proccontents@gmail.com> wrote:
> Hello all ,
> What I am doing is formating my visits to fit inside the graph but some how
> I am getting an error in the dataset. Is there I am missing here in the
> datastep or Proc format ??
>
>
> proc format;
> invalue $tmt
>
> 'BASELINE' = 'BASE'
> 'CYCLE 1, DAY 1: DAY 1 - 1 HOUR' = 'C1D1-1H'
> 'CYCLE 1, DAY 1: DAY 1 - 1.5 HOURS' = 'C1D1-1.5H'
> 'CYCLE 1, DAY 2' = 'C1D2'
> 'CYCLE 1, DAY 5' = 'C1D5'
> 'CYCLE 1, DAY 8' = 'C1D8'
> 'CYCLE 10, DAY 1: DAY 1 - 1 HOUR' = 'C10D1-1H'
> 'CYCLE 10, DAY 1: DAY 1 - 1 HOUR BEFORE DOSING' = 'C10D1-1HB'
> 'CYCLE 10, DAY 8' = 'C10D8'
> 'CYCLE 2, DAY 1: DAY 1 - 1 HOUR' = 'C2D1-1H'
> 'CYCLE 2, DAY 1: DAY 1 - 1 HOUR BEFORE DOSING' = 'C2D1-1HB'
> 'CYCLE 2, DAY 1: DAY 1 - 1.5 HOURS' = 'C2D1-1.5H'
> 'CYCLE 2, DAY 1: DAY 1 - BEFORE DOSING' = 'C2D1-B'
> 'CYCLE 2, DAY 2' = 'C2D2'
> 'CYCLE 2, DAY 5' = 'C2D5'
> 'CYCLE 2, DAY 8' = 'C2D8'
> 'CYCLE 3, DAY 1: DAY 1 - 1 HOUR' = 'C3D1-1H'
> 'CYCLE 3, DAY 1: DAY 1 - 1 HOUR BEFORE DOSING' = 'C3D1-1HB'
> 'CYCLE 3, DAY 8' = 'C3D8'
> 'CYCLE 4, DAY 1: DAY 1 - 1 HOUR' = 'C4D1-1H'
> 'CYCLE 4, DAY 1: DAY 1 - 1 HOUR BEFORE DOSING' = 'C4D1-1HB'
> 'CYCLE 4, DAY 8' = 'C4D8'
> 'CYCLE 5, DAY 1: DAY 1 - 1 HOUR' = 'C5D1-1H'
> 'CYCLE 5, DAY 1: DAY 1 - 1 HOUR BEFORE DOSING' = 'C5D1-1HB'
> 'CYCLE 5, DAY 8' = 'C5D8'
> 'CYCLE 6, DAY 1: DAY 1 - 1 HOUR' = 'C6D1-1H'
> 'CYCLE 6, DAY 1: DAY 1 - 1 HOUR BEFORE DOSING' = 'C6D1-1HB'
> 'CYCLE 6, DAY 8' = 'C6D8'
> 'CYCLE 7, DAY 1: DAY 1 - 1 HOUR' = 'C7D1-1H'
> 'CYCLE 7, DAY 1: DAY 1 - 1 HOUR BEFORE DOSING' = 'C7D1-1HB'
> 'CYCLE 7, DAY 8' = 'C7D8'
> 'CYCLE 8, DAY 1: DAY 1 - 1 HOUR' = 'C8D1-1H'
> 'CYCLE 8, DAY 1: DAY 1 - 1 HOUR BEFORE DOSING' = 'C8D1-1HB'
> 'CYCLE 8, DAY 8' = 'C8D8'
> 'CYCLE 9, DAY 1: DAY 1 - 1 HOUR' = 'C9D1-1H'
> 'CYCLE 9, DAY 1: DAY 1 - 1 HOUR BEFORE DOSING' = 'C9D1-1HB'
> 'CYCLE 9, DAY 8' = 'C9D8'
> ;
> run;
>
> data test ;
> set lbtest;
> Char_visit= put(visit,$tmt. );
> run;
>
> Log
>
> 545 Char_visit= put(visit,$tmt. );
> _____
> 48
> ERROR 48-59: The format $TMT was not found or could not be loaded.
>
|