athresh
athresh

Reputation: 553

Reading a period as character value in SAS

I am reading a period '.' as a character variable's value but it is reading it as a blank value.

data output1;
input @1 a $1. @2 b $1.  @3 c $1.;
datalines;
!..
1.3
;
run;

Output       Required
------       --------
A  B  C      A  B  C
!            !  .  .
1     3      1  .  3

Please help me in reading a period as such.

Upvotes: 7

Views: 1310

Answers (2)

vasja
vasja

Reputation: 4792

The output is determined by the informat used ($w. informat in your case, requested by $1. in your code, so $1. is first of all informat definition, lenght definition of variable is a side product of this).

Use $char. informat for desired result.

data output1;
input @1 a $char1. @2 b $char1.  @3 c $char1.;
datalines;
!..
1.3
;
run;

From documentation:

$w Informat The $w. informat trims leading blanks and left aligns the values before storing the text. In addition, if a field contains only blanks and a single period, $w. converts the period to a blank because it interprets the period as a missing value. The $w. informat treats two or more periods in a field as character data.

$CHARw. informat The $CHARw. informat does not trim leading and trailing blanks or convert a single period in the input data field to a blank before storing values.

Upvotes: 12

mvherweg
mvherweg

Reputation: 1283

I don't immediately see why it does not work. But if you are not interested in figuring out why it does not work, but just want something that does: read it in as 1 variable of length $3. Then in a next step; split it using substr.

E.g.,

data output1;
    length tmp $3;
    input tmp;
    datalines;
        !..
        1.3
    ;
run;
data output2 (drop=tmp);
    length a $1;
    length b $1;
    length c $1;

    set output1;

    a=substr(tmp,1,1);
    b=substr(tmp,2,1);
    c=substr(tmp,3,1);
run;

Upvotes: 0

Related Questions