4
data test;
name = 'abcdefgh';
age = 30;
res = name || age;
run;

上記のコードを実行すると、変数 res が保持されます -> abcdefgh 30

数値変数 age が空白で埋められてから、文字変数と連結されるのはなぜですか?

4

4 に答える 4

8

数値と文字を連結する場合、まず数値が文字変数に変換され、次に 2 つの文字変数が連結されます。数値変数を文字変数に変換するためのデフォルトのフォーマットは BEST12 です。(ただし、数値変数の形式によって異なる場合があります)。 put(30,BEST12.)これは'          30'文字変数に連結されます。

これを回避するには、Aaron が指摘するように strip を使用するか、すべての変数を自動的に削除する CATS ( ) を使用して連結を行うres=cats(name,age);か、数値変数を自分で配置します (PUT を使用すると、必要に応じて -l を使用して強制的に左詰めにすることができます)。オプション)。

于 2013-01-10T15:50:04.927 に答える
2

以下のコードを試して、変数をスペースなしで連結してください。

data test;
name = 'abcdefgh';
age = 30;
res = name || strip(age);
run;

SAS は風変わりな場合があります。「なぜ」についての私の最良の推測は、SASがテキスト出力リストの数字を右揃えにしようとしているということです。

于 2013-01-10T15:41:00.573 に答える
0

あなたは「なぜ」それをしているのかと尋ねました。他の人がここで述べた素敵な方法で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替えるDOG1DOG11、、、DOG2...

ちょうど私の観察。それが役立つことを願っています。

于 2015-08-10T15:55:23.753 に答える
0

これも使用できます:

res=name || put(age,3.);

数値変数にStrip、Trim などの関数を使用しないでください。ログ ウィンドウに次のように表示されます。

注: 数値は、(行):(列) で指定された場所で文字値に変換されています。

于 2015-07-15T07:06:18.143 に答える