我的目標是獲得一個CSV文件的幾個數字列,所謂的氣溫我,與其他分析走得更遠。不幸的是,最後一列是以文本類型獲得的我SAS文件中讀取輸入()函數可以將文本轉換爲數字格式,所以我試圖調用它,但它失敗的第5行,顯示日誌窗口:迭代通過SAS列的值 - 字符串操作
NOTE: Invalid argument to function INPUT at line 3278 column 10.
我一起來到通過檢查該列中每個元素的十六進制代碼來修復它。正如我注意到的,只有最後一行(即成功的行)沒有CR字符(0D)。其他人拿到了。我發現壓縮函數對於範圍很有用,所以我在數據步驟中使用了它,但它並未刪除CR字符。 我告訴你我的代碼:
data work.meteo;
drop var7;
set work.meteo(rename=(var1=Prov var2=temp1 var3=temp2 var4=temp3 var5=temp4));
x=compress(var6, '\r');
format x $hex10.;
temp5 = input(x, 8.);
run;
我認爲壓縮無法列名可以使用,但我怎麼能遍歷列值正確調用它?有更好的方法來達到相同的目標嗎? 謝謝。
編輯問題喬的回答是: 是的,我嘗試了兩種方法來讀取CSV源文件;第一個包含一個Proc進口:
proc import datafile = 'path-file\...\meteo.csv'
out= work.meteo
dbms = CSV replace;
getnames = no;
run;
第二個是infile和termstr。
data mydata;
infile "path-file\...\meteo.csv"
dsd termstr=crlf truncover;
input Prov $ temp1 temp2 temp3 temp4 temp5 ;
run;
在最後一個方法中,它導致temp5中沒有值的數據集(最後一行除外)。
感謝@Tom,這是另一個有價值的解決方案:我在文檔中讀入了@在所謂的「自動變量」或緩衝區(如\ _infile \ _)內保留最後一條記錄的相同數據步驟。在這個\ _infile \ _中,你可以刪除所有變量的值CR字符。我是否正確? –
本質上。 \ _INFILE_自動變量讓您訪問SAS用來存儲從輸入讀取的當前行的內部緩衝區。第一個INPUT上的尾部@告訴SAS你還沒有完成從這條線讀取。這是保持下一條INPUT語句不會嘗試讀取輸入中的下一行的原因。而是從寫入\ _INFILE_變量的行中讀取。 – Tom