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
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?
> -----Original Message-----
> From: Jack F. Hamilton [mailto:email@example.com]
> 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:
> You should send email to firstname.lastname@example.org 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
>> 2. What's the purpose for listing the second x in the input statement?
>> Thanks. Max
>> data temp;
>> input x 1. name $varying9. x;
>> proc print;
>> Result of this code:
>> obs x name
>> 1 3 sun