2013-10-04 7 views
6

私はピリオド '。'文字変数の値として扱いますが、それを空白の値として読み取っています。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 

このような期間を読むのを手伝ってください。

答えて

11

出力はそう$1.は、最初にすべてのinformat定義の変数のな長さの定義である、あなたのコードで$1.によって要求されたあなたのケースでは($ワットinformat使用informat、によって決定されますこれの副産物です)。

$ charを使用してください。希望の結果をインフォーマットする。 Informat ワット

$ $のワット:ドキュメントから

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

。インフォマットは先頭の空白をトリムし、テキストを保存する前に値を左揃えにします。さらに、フィールドに空白と1つのピリオドのみが含まれている場合、$ w。期間を欠損値として解釈するため、期間を空白に変換します。 $ w。 informatは、フィールド内の2つ以上のピリオドを文字データとして扱います。

$ CHARw。インフォメーション $ CHARw。インフォーメイトでは、前後のブランクをトリミングしたり、入力データフィールドの単一のピリオドをブランクに変換してから値を格納したりしません。

+1

これはすごい!どうもありがとう – athresh

0

なぜそれが動作しないのか分かりません。 しかし、それがうまくいかない理由を理解するのに興味がなく、何かしたいことがあれば、長さ$ 3の1変数としてそれを読んでください。次に、次のステップに進みます。 substrを使用して分割します。

例えば、

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

入力いただきありがとうございます。しかし、私はそれを行うことができない単一の文字としてそれを読む必要があります。 – athresh