data test;
name = 'abcdefgh';
age = 30;
res = name || age;
run;
當運行上述代碼的可變資源持有數字 - > ABCDEFGH 30連接具有字符
爲什麼數字可變年齡是填充用空白,然後用字符變量級聯?
data test;
name = 'abcdefgh';
age = 30;
res = name || age;
run;
當運行上述代碼的可變資源持有數字 - > ABCDEFGH 30連接具有字符
爲什麼數字可變年齡是填充用空白,然後用字符變量級聯?
當數字和字符連接在一起時,數字首先轉換爲字符變量,然後將兩個字符變量連接在一起。將數字變量轉換爲字符變量的默認格式是BEST12。 (儘管這可以根據您的數字變量的格式而有所不同)。 put(30,BEST12.)
會產生' 30'
,然後連接到字符變量。
要避免這種情況,可以使用strip作爲Aaron筆記,或者使用自動剝離所有變量的CATS(res=cats(name,age);
)進行連接,或者自己放置數值變量(並且使用PUT,可以強制將其左對齊想用-l選項)。
嘗試下面的代碼來連接沒有空間的變量。
data test;
name = 'abcdefgh';
age = 30;
res = name || strip(age);
run;
SAS可能會古怪。對於「爲什麼」,我最好的猜測是SAS試圖讓這些數字看起來是正確的文本輸出列表。
謝謝Aaron,但想知道爲什麼它填補空白,然後連接。 – athresh
您可以使用此還有:
res=name || put(age,3.);
不要使用地帶,修剪等功能數值變量。您將在日誌窗口中看到NOTE:
注意:數字值已在(行):(列)給定的位置轉換爲字符值。
你曾問過「爲什麼」它在做。如果你強制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
...
只是我的觀察。希望有所幫助。
真棒解釋,謝謝喬,但無法理解你的意思'或自己把數字變量(和PUT,你可以強迫左對齊它,如果你想用-l選項)。 – athresh
根據你的目標,還有很多'cats'函數的其他變體,所以不要忘記檢查'catt()'和'catx()'。 –
我的意思是自己使用put函數 - 當你說'res = name || age;'時,SAS會自動爲你做這個,但是你可以很容易地做'res = name || put(age,3. -l);' 。有關更多信息,請參閱http://www.sascommunity.org/wiki/Tips:Aligning_with_a_Put_Function。 – Joe