Date: Fri, 26 Nov 2010 11:20:41 -0800
Reply-To: "Jack F. Hamilton" <jfh@STANFORDALUMNI.ORG>
Sender: "SAS(r) Discussion" <SAS-L@LISTSERV.UGA.EDU>
From: "Jack F. Hamilton" <jfh@STANFORDALUMNI.ORG>
Subject: Re: $varying9. and strange input statement
In-Reply-To: <001d01cb8d9c$66a62450$33f26cf0$@com>
Content-Type: text/plain; charset=us-ascii
1) No, the value of X is not being used as the informat's D value. It's being used as the informat's W value.
2) The statement is doing what it is designed to do and documented as doing. If you don't know what the $VARYING informat does, then no, you won't understand the results, but if you don't know what the $VARYING informat does, then you shouldn't use it.
Do you have a suggestion for a less "sloppy" way to do the same thing?
On Nov 26, 2010, at 11:01 , bbser2009 wrote:
> Art and Jack
>
> Consider two input statements to read the character data value 3sunfish:
> 1. input x 1. name $varying9. x;
> 2. input x 2. name $9. x;
>
> As you mentioned,
> 1) in the first input statement, SAS treats the second x as the d value,
> namely, the decimal part of the informat $varying9.
> 2) But for the second input statement, SAS seemly tries to read another
> numeric value for the second x, so we actually ended up with a missing value
> for x in the output.
>
> This is really a sloppy grammar. Any comments, please?
>
> Max
>
>
> -----Original Message-----
> From: Jack F. Hamilton [mailto:jfh@alumni.stanford.org]
> Sent: November-26-10 1:22 PM
> To: bbser2009
> Cc: SAS-L@LISTSERV.UGA.EDU
> Subject: Re: [SAS-L] $varying9. and strange input statement
>
> The example you show below is straight out of the documentation:
>
>
> <http://support.sas.com/onlinedoc/913/getDoc/en/lrdict.hlp/a000193602.htm>
>
> You should send email to support@sas.com asking them to improve the
> documentation if you don't think it's sufficient. I agree that the
> documentation is a bit murky, but working through the two examples should
> make it clear.
>
> "input x 1." reads "3" from the input line and stores it as the number 3 in
> the variable X.
>
> "name $varying9. x" reads the next portion of the input line into variable
> NAME. How much does it read? The number of characters specified in
> variable X. You just set the value of X to 3, so it reads 3 characters. If
> x equals 3, then "$varying9. x" reads 3 characters. If x equals 8,
> "$varying9. x" reads 8 characters.
>
>
>
>
> On Nov 26, 2010, at 9:55 , bbser2009 wrote:
>
>> Here are two questions about the code below:
>> 1. Why the value for the variable name is the string "sun" instead of
>> "sunfish"?
>> 2. What's the purpose for listing the second x in the input statement?
>>
>> Thanks. Max
>>
>> data temp;
>> input x 1. name $varying9. x;
>> cards;
>> 3sunfish
>> ;
>> proc print;
>> run;
>>
>> Result of this code:
>>
>> obs x name
>> 1 3 sun
>
|