2013-10-04 11 views
6

Czytam kropkę "." jako wartość zmiennej znakowej, ale odczytuje ją jako pustą wartość.Odczytywanie okresu jako wartości znaku w SAS

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 

Proszę mi pomóc w czytaniu okresu jako takiego.

Odpowiedz

11

Wyjście jest określana przez informat używany ($ w. Informat w danym przypadku, na wniosek $1. w kodzie, więc $1. jest przede wszystkim informat definicji definicja długość zmiennej jest produktem ubocznym tego).

Użyj $ char. informat dla pożądanego rezultatu.

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

Z dokumentacji:

$ w INFORMAT $ wag. informat przycina wiodące spacje i lewo wyrównuje wartości przed zapisaniem tekstu. Ponadto, jeśli pole zawiera tylko spacje i pojedynczy okres, $ w. przekształca ten okres na pusty, ponieważ interpretuje ten okres jako brakującą wartość. $ W. informat traktuje dwa lub więcej okresów w polu jako dane znakowe.

$ CHARw. informat $ CHARw. informat nie przycina początkowych i końcowych spacji lub przekształca pojedynczy okres w polu danych wejściowych na pusty przed zapisaniem wartości.

+1

to jest zdumiewające !!! Wielkie dzięki – athresh

0

Nie widzę od razu, dlaczego to nie działa. Ale jeśli nie chcesz dowiedzieć się, dlaczego to nie działa, ale po prostu chcę czegoś, co robi: przeczytaj to jako 1 zmienną o długości 3 USD. Następnie w następnym kroku; podziel go za pomocą substr.

Np

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; 
+0

Dzięki za Twoje dane wejściowe. Ale muszę przeczytać to jako jedną postać, której nie jestem w stanie zrobić. – athresh

Powiązane problemy