我是新來的SAS,我有以下問題。字符到數字在SAS
我有一個存儲時間的變量,但是一個字符,格式爲$ 50。它看起來像30分鐘,1.5小時,5小時,10小時。我需要將其轉換爲數字並計算以小時爲單位的時間。我嘗試了substrn函數來提取數字。但是substrn(var,1,2)給出30,1(而不是1.5),5,10和substrn(var,1,3)給出30,1.5,。(而不是5),10.如何解決它?
任何幫助表示讚賞。
我是新來的SAS,我有以下問題。字符到數字在SAS
我有一個存儲時間的變量,但是一個字符,格式爲$ 50。它看起來像30分鐘,1.5小時,5小時,10小時。我需要將其轉換爲數字並計算以小時爲單位的時間。我嘗試了substrn函數來提取數字。但是substrn(var,1,2)給出30,1(而不是1.5),5,10和substrn(var,1,3)給出30,1.5,。(而不是5),10.如何解決它?
任何幫助表示讚賞。
有可能是一種方法來創建一個自定義的信息來處理這個問題,我希望喬或其他常客在這裏可以建議你。然而,做不到這一點,這裏有一個基於函數的方法:從性格
data have;
input time_raw $1-50;
cards;
30 min
1.5 h
5 h
10 h
;
run;
data want;
set have;
if index(time_raw, 'min') then do;
minutes = input(substr(time_raw,1,length(time_raw) - 4), 8.);
hours = 0;
end;
else do;
hours = input(substr(time_raw, 1, length(time_raw) - 2), 8.);
minutes = 0;
end;
format time time.;
time = hms(hours, minutes, 0);
run;
轉換爲數字通常是使用input
函數來完成。第二個參數傳遞預期的informat(告訴SAS如何解釋輸入的規則)。
您可以使用compress
函數(使用「k」選項來保留而不是放棄字符)來獲取字符變量的數字部分。壓縮將從一個值中刪除某些字符;第一個參數傳遞要處理的字符串,第二個參數列出要刪除的字符,第三個參數傳遞附加選項(這裏「d」將數字添加到要刪除的字符列表中,「k」將反轉過程即保留而不是刪除選定的字符)。
而且,index
函數可用於標識字符串包含「m」分鐘的時間。索引將返回輸入內搜索字符串第一次出現的位置。在輸入不包含「m」的情況下,它將返回0並在if語句中評估爲FALSE。
/* Create some input data */
data temp;
input time : $20.;
datalines;
1.5h
30min
120min
4.25hour
;
run;
data temp2;
set temp;
/* Extract only the numeric part of the string and convert to numeric */
newTime = input(compress(time, ".","dk"), best9.);
/* Check if the string contains the letter "m" and if so divide by 60 */
if index(time, "m") then newTime = newTime/60;
run;
proc print;
run;
有沒有一種真正的方法來製作自定義信息。不幸的是,圖片信息是不可能的。在這種情況下,壓縮是最好的方法。 – Joe 2014-09-21 17:25:05
我嘗試了輸入/壓縮選項,它工作。但非常感謝您的回答。 – Natalia 2014-09-22 18:50:59