2016-07-11 6 views
1

データステップからjsonファイルを書き込もうとしています。SASでのサテライトの埋め込みを避ける方法

私のputステートメントは、変数の後に常に不要なスペースを追加します。

put '   {"year":' year ','; 

{"year":2013 ,

put ' {"name":"' %trim(name) '", ' ; 

を作成します。私は物事が複雑になり過ぎずに "風疹ウイルス" の後にスペースを削除するにはどうすればよい{"name":"Rubella virus ",

を作るのだろうか?

newvar=cats('{"name":"',name,'",'); 
put newvar; 

ありがとう:


私の最善の解決策は、これまでcatsを使用する変数を作成し、newvariableこのようなビットを置くことです!

+0

が、これは、変数のホワイトスペースとは何の関係もありませんが、それはプット機能のプロパティです@andrey_sz代わりトリム –

+1

のストリップ機能を使用するようにしてください。変数の後には常に1つの空白が入ります。 (+) - 1を使用すると、1つのスペースだけ後ろに移動する必要があります。以下の私のasnwerを見てください。 –

答えて

4

ポインタを1ステップ戻す必要があります。あなたはマイナス1ステップで前進することを求めてこれを行います。これを使用してください:

'{"名前": "'名前(+) - 1 '"、';

私は知っていますが、動作します。ここで

はsashelp.classと例です。

コード:

data _null_; 
    set sashelp.class end = eof; 

    if _N_ eq 1 then 
     put '['; 
    put '{ "Name":"' Name+(-1) 
     '","Sex":"' Sex+(-1) 
     '","Age":"' Age+(-1) 
     '","Height":"' Height+(-1) 
     '","Weight":"' Weight+(-1) 
     '"}'; 

    if eof then 
     put ']'; 
    else put ','; 
run; 

結果:

[ 
    { "Name":"Alfred","Sex":"M","Age":"14","Height":"69","Weight":"112.5"} 
    , 
    { "Name":"Alice","Sex":"F","Age":"13","Height":"56.5","Weight":"84"} 
    , 
    { "Name":"Barbara","Sex":"F","Age":"13","Height":"65.3","Weight":"98"} 
    , 
    { "Name":"Carol","Sex":"F","Age":"14","Height":"62.8","Weight":"102.5"} 
    , 
    { "Name":"Henry","Sex":"M","Age":"14","Height":"63.5","Weight":"102.5"} 
    , 
    { "Name":"James","Sex":"M","Age":"12","Height":"57.3","Weight":"83"} 
    , 
    { "Name":"Jane","Sex":"F","Age":"12","Height":"59.8","Weight":"84.5"} 
    , 
    { "Name":"Janet","Sex":"F","Age":"15","Height":"62.5","Weight":"112.5"} 
    , 
    { "Name":"Jeffrey","Sex":"M","Age":"13","Height":"62.5","Weight":"84"} 
    , 
    { "Name":"John","Sex":"M","Age":"12","Height":"59","Weight":"99.5"} 
    , 
    { "Name":"Joyce","Sex":"F","Age":"11","Height":"51.3","Weight":"50.5"} 
    , 
    { "Name":"Judy","Sex":"F","Age":"14","Height":"64.3","Weight":"90"} 
    , 
    { "Name":"Louise","Sex":"F","Age":"12","Height":"56.3","Weight":"77"} 
    , 
    { "Name":"Mary","Sex":"F","Age":"15","Height":"66.5","Weight":"112"} 
    , 
    { "Name":"Philip","Sex":"M","Age":"16","Height":"72","Weight":"150"} 
    , 
    { "Name":"Robert","Sex":"M","Age":"12","Height":"64.8","Weight":"128"} 
    , 
    { "Name":"Ronald","Sex":"M","Age":"15","Height":"67","Weight":"133"} 
    , 
    { "Name":"Thomas","Sex":"M","Age":"11","Height":"57.5","Weight":"85"} 
    , 
    { "Name":"William","Sex":"M","Age":"15","Height":"66.5","Weight":"112"} 
    ] 

よろしく、 Vasilij

+0

私はこのエラーに遭遇しています: 'エラー22-322:構文エラー。名前、arrayname、_ALL_、_CHARACTER_、 _CHAR_、_NUMERIC_.'のいずれかが必要です。 –

+0

@ooo問題はありません。私はsashelp.classの例を紹介します。それが助けになるかもしれない。 –

+0

拡張された例が正常に動作します。ありがとう! –

1

あなたは「クリーナーを持って探している場合'コードを使用すると、を使用して1つまたは2つのヘルパー関数を構築することができます。この関数は、文字列の説明、必要なフィールドの名前、および返された文字列を引用するかどうかを受け取ります。あなたの値は引用符を含めることができる場合、あなたはTの代わりにquote()機能を使用したい場合があります

例機能:

proc fcmp outlib=work.funcs.funcs; 

    function json(iName $, iField $, iQuote) $;  
    length result $200; 
    quote_char = ifc(iQuote,'"',''); 
    result = cats('"', iName, '":',quote_char, iField, quote_char); 
    return (result); 
    endsub; 

run; 

使用例:

data _null_; 
    set sashelp.class; 
    x = catx(',', 
      json("name",name,1), 
      json("age",age,0)); 
    put x; 
run; 

例出力:

"name":"Alfred","age":14 
"name":"Alice","age":13 
"name":"Barbara","age":13 
"name":"Carol","age":14 
"name":"Henry","age":14 
"name":"James","age":12 
"name":"Jane","age":12 
2

文字フィールドの場合は、$QUOTE.形式を使用して引用符を追加できます。 :を使用して、変数の値の末尾の空白を削除します。

put '{ "Name":' Name :$quote. 
    ',"Sex":' Sex :$quote. 
    ',"Age":"' Age +(-1) '"' 
    ',"Height":"' Height +(-1) '"' 
    ',"Weight":"' Weight +(-1) '"' 
    '}' 
; 
+0

ニース - '$ quote.'形式と': '修飾子のどちらも知らなかった... –

関連する問題