2016-07-20 70 views
0

我有我的加密當我連接到不同的服務器密碼的自動執行文件....代碼如下所示:SAS輸入語句

%global wspwd ewspwd hpwd ehpwd ; 

/* Enter WORKSTATION Password Below */ 
filename ewspwdfl "/home/&sysuserid./ewspwd.txt" ; 
proc pwencode in=’XXXXXXXX’ out=ewspwdfl ; run ; 
data _null_ ; 
    infile ewspwdfl obs=1 length=l ; 
    input @ ; 
    input @1 line1 $varying1024. l ; 
    call symput('ewspwd',cats(substr(line1,1,l))) ; 
    call symput('wspwd',cats(‘XXXXXXXX’)) ; 
run ; 

我的問題是:爲什麼是

input @ ; 

包括爲什麼

input @1 line1 $varying1024. l ; 

是不夠的。

每當我用SAS創建數據集時,我從來不必包含「input @;」在我的發言中。我只是簡單地寫了一些內容:

input @1 firstname $ @15 lastname $ @30 date mmddyy6.; 
+0

爲什麼你認爲這是必要的?你嘗試刪除它,並做到這一點,使其無法正常工作?它以什麼方式不起作用? – Tom

+0

我有這樣的設置......我想我不需要它,但我不確定所有依賴此autoexec文件的意外情況,所以我沒有改變任何東西。我曾經談過的人不知道它的目的...... – DukeLuke

+0

你需要它來獲得一些INFILE選項來填充。如FILENAME =選項或EOV =選項。但我不認爲你需要它用於你的代碼使用的LENGTH =選項。 – Tom

回答

2

您並不需要它用於該數據步驟。你可以簡化它。

data _null_ ; 
    infile ewspwdfl obs=1 TRUNCOVER ; 
    input line1 $CHAR1024. ; 
    call symputX('ewspwd',line1); 
    call symputX('wspwd',‘XXXXXXXX’) ; 
run ; 

使用input @是創建要讀取使用不同的輸入語句不同的線路方案的好方法。您可以測試_infile_變量的內容,並根據讀取的內容執行數據步驟的不同部分。

在INFILE語句中使用EOV =選項來檢測何時開始從新文件讀取數據時也很有用,因爲在開始讀取新文件之前它沒有設置。因此,INPUT @會讓SAS開始讀取,以便設置EOV變量,但會保持該行等待您的實際INPUT語句稍後讀取。

如果您想要將相同的列重新讀入不同的變量,則@1非常有用。例如,您可能需要將前幾個字符作爲字符串讀取,然後對其進行測試,並根據您發現的重新讀取的數字或日期進行測試。

+0

「使用輸入@是創建程序的好方法,您可以使用不同的輸入語句來讀取不同的行。」是指格式化,列,列表和名稱輸入? – DukeLuke

+0

讓你在這個最近的問題中編寫一些閱讀複雜垃圾的代碼是有用的。 https://stackoverflow.com/questions/38503002/import-unsorted-data-from-a-notepad-file-txt-into-sas – Tom