2013-10-05 39 views
0

我正在嘗試在我的數據子集中使用PROC FREQ,名爲dataname。我希望它包含varname不等於「A.Never Used」的所有行。我有以下代碼:SAS:Where語句不能與字符串值一起工作

proc freq data = dataname(where =(varname NE'A.Never Used')); 跑;

我認爲有可能與尾隨或前導空白,所以我還嘗試了問題:

PROC頻率數據=數據名(其中=(條帶(VARNAME)NE「A.Never二手」)); 跑;

我的猜測是由於某些原因,我的字符串值不是「A.Never Used」,但每當我打印數據時,這是我看到的值。

回答

2

這是處理字符串數據時的一個常見問題(以及不是!)的一個很好的理由。您應該考慮數據的來源 - 是否來自網絡表單?那麼它可能包含不間斷空格('A0'x)而不是常規空格('20'x)。它是否來自unicode環境(比如說日文字符是合法的)?那麼你可能有轉碼問題。

,對於絕大多數的這些問題的工作有幾個選項:

  1. 壓縮了一切,但字母字符。例如,where=(compress(varname,,'ka') ne 'ANeverUsed')。 'ka'意思是'只保留'和'字母字符'。
  2. UPCASE或LOWCASE以確保您不會遇到案件問題。
  3. 在數據步驟中使用put varname HEX.;來查看底層字符。每兩個十六進制字符是一個字母字符。 20是空格(其中strip將刪除)。這樣做之前排序varname,這樣你可以很容易地看到你認爲應該這個值彼此相鄰的行 - 有什麼區別?可能是一些特殊字符或多字節字符,或者誰知道什麼,但在這裏應該很明顯。
相關問題