data test;
name = 'abcdefgh';
age = 30;
res = name || age;
run;
上記のコードを実行すると、変数 res が保持されます -> abcdefgh 30
数値変数 age が空白で埋められてから、文字変数と連結されるのはなぜですか?
data test;
name = 'abcdefgh';
age = 30;
res = name || age;
run;
上記のコードを実行すると、変数 res が保持されます -> abcdefgh 30
数値変数 age が空白で埋められてから、文字変数と連結されるのはなぜですか?
数値と文字を連結する場合、まず数値が文字変数に変換され、次に 2 つの文字変数が連結されます。数値変数を文字変数に変換するためのデフォルトのフォーマットは BEST12 です。(ただし、数値変数の形式によって異なる場合があります)。 put(30,BEST12.)
これは' 30'
文字変数に連結されます。
これを回避するには、Aaron が指摘するように strip を使用するか、すべての変数を自動的に削除する CATS ( ) を使用して連結を行うres=cats(name,age);
か、数値変数を自分で配置します (PUT を使用すると、必要に応じて -l を使用して強制的に左詰めにすることができます)。オプション)。
以下のコードを試して、変数をスペースなしで連結してください。
data test;
name = 'abcdefgh';
age = 30;
res = name || strip(age);
run;
SAS は風変わりな場合があります。「なぜ」についての私の最良の推測は、SASがテキスト出力リストの数字を右揃えにしようとしているということです。
あなたは「なぜ」それをしているのかと尋ねました。他の人がここで述べた素敵な方法でSASが望むように定義しないように強制すると、ある変数が文字列として定義され、別の変数が数値として定義されている場合、ソートの問題が発生する可能性があります。例:
VAR3 = VAR1 || VAR2;
VAR4 = VAR1 || PUT(VAR2,2.);
VAR1 VAR2 VAR3 VAR4
DOG 1 DOG 1 DOG1
DOG 2 DOG 2 DOG2
... ... ... ...
DOG 11 DOG11 DOG11
並べ替えると、VAR3
おそらく必要なものが得られます....並べVAR4
替えるDOG1
とDOG11
、、、DOG2
...
ちょうど私の観察。それが役立つことを願っています。
これも使用できます:
res=name || put(age,3.);
数値変数にStrip、Trim などの関数を使用しないでください。ログ ウィンドウに次のように表示されます。
注: 数値は、(行):(列) で指定された場所で文字値に変換されています。