Date: Wed, 12 Jan 2000 13:48:04 -0500
Reply-To: Howard Schreier <Howard_Schreier@ITA.DOC.GOV>
Sender: "SAS(r) Discussion" <SAS-L@LISTSERV.UGA.EDU>
From: Howard Schreier <Howard_Schreier@ITA.DOC.GOV>
Subject: Re: the first digit of the number
Content-Type: text/plain; charset=US-ASCII
Here's a solution which does no numeric-to-character conversion,
explicit or implicit.
The treatment of values in the zero-one range excluding endpoints
is a little rough, but it's not clear to me what is actually wanted there.
data numbers;
input number;
if number = 0 then firstdig = 0;
else firstdig = int(abs(number)/10**int(log10(abs(number))));
put number= firstdig=;
cards;
3.5
1000
0
1
456
.123
-.00034
-5
;
Result:
NUMBER=3.5 FIRSTDIG=3
NUMBER=1000 FIRSTDIG=1
NUMBER=0 FIRSTDIG=0
NUMBER=1 FIRSTDIG=1
NUMBER=456 FIRSTDIG=4
NUMBER=0.123 FIRSTDIG=0
NUMBER=-0.00034 FIRSTDIG=0
NUMBER=-5 FIRSTDIG=5
"Primak, Philip" wrote:
>
> Dear SAS-L,
>
> I have to get the first digit of the number. Is there something more simple
> and elegant than
>
> firstdgt=input(substr(scan(put(number,best8.),1),1,1),best8.);
>
> Thanks,
> Philip Primak
> Genzyme Corp.
|