2017-08-16 17 views
0

當我使用strip函數運行一些簡單的代碼來創建變量時,它會正確地去除前導和尾隨空白。但是,當我調用該程序時,代碼與%include一起使用。它不起作用。當使用%調用程序時,SAS字符串函數不起作用include

data aniorder; 
    input animalname $ seq taxonomy $20.; 
    datalines; 
    DOG 1 800 
    ELEPHANT 2 0 
    FISH 3 0 
    ; 
run; 
data aniorder2; 
    set aniorder; 
ani = strip(animalname); 
keep ani seq taxonomy; 
run; 

當運行%包括,我沒有得到一個錯誤信息,但在aniorder2數據集變量「ANI」仍具有領先和尾隨空白。當我剛剛運行上面的代碼時,這不會發生。

任何人都知道%include包含在這裏發生了什麼?

回答

1

變量將始終有尾隨空白。 SAS字符變量是固定長度的,並填充空格。但STRIP()函數調用將肯定刪除前導空白,但不應該有任何前導空白,因爲在輸入語句中使用了信息。

也許你的源文件有錯誤的行尾字符?例如,如果你在PC上創建了文件,它通常在每行的末尾都有CR + LF。如果您在Unix上讀取該文件,CR將成爲該行數據的一部分。並且,自從您將發佈的示例作爲數據行上的前導空格(爲什麼是那些?),可能是使用TAB字符替換了一些空白字符來保存該文件?

嘗試調整您的程序。您可以嘗試在%INCLUDE語句中添加/ TERMSTR=CRLF選項,並查看是否消除了尾隨的「空白」。您可以嘗試添加一條INFILE聲明,以便您可以包含EXPANDTABS並查看是否消除了前導「空白」。您還可以添加TRUNCOVER選項,因爲您讀取的字符數多於行數。不知道是否需要它,因爲通常將內嵌數據自動填充到80個字符的倍數。

data aniorder; 
    infile datalines expandtabs truncover ; 
    input animalname $ seq taxonomy $20.; 
datalines; 
DOG 1 800 
ELEPHANT 2 0 
FISH 3 0 
; 
+0

謝謝湯姆!這與刪除數據線上的製表符一樣簡單。 –

+0

爲什麼你不應該在源代碼文件中存儲實際的TAB字符的另一個例子。如果您正在使用SAS Display Manager編輯器,則可以更改設置以使其替換爲空格。 – Tom

相關問題