2015-05-04 161 views
1

我正在處理一些SAS代碼並遇到問題。我正在嘗試使用體重和身高計算6000名患者的BMI(因此數據不是選項)。目前,高度目前爲508英寸,5英尺,08英寸等等。所以我想我會嘗試結合substr和輸入語句從3位數字代碼中拉出第一位數字,然後對英寸進行相同操作。當我有這兩個新變量時,我就可以完成剩下的工作,但是我似乎無法使這個特定的數據步驟起作用。SAS創建新變量,它是現有變量的第一個數字

這是我有:

data work.bmi_prep; 
set work.fixedmissing; 
HEIGHTFT=input(substr(HEIGHT3,1,1),3.); 
run; 

,如果有人可以告訴我,我要去哪裏錯了,這將是巨大的。

+3

你正在得到什麼錯誤或不希望的輸出? – NEOmen

+2

我想這可能是一個領先的空格問題..使用這種壓縮函數..HEIGHTFT = input(substr(compress(HEIGHT3),1,1),3。); – NEOmen

+1

您的變量HEIGHT3字符或數字?如果是數字,則使用put函數,如HEIGHTFT = input(substr(put(HEIGHT3,3。),1,1),3。 strip功能也可以使用。 – Kay

回答

0

正如其他人在評論中所說的,您遇到的錯誤可能是由於輸入字符串中的前導空格造成的。 處理包含數字的字符變量時,一個很好的規則是在使用或從該變量提取數字之前應用left()或strip()或compress()函數。

在你的例子中使用字符串處理函數(作爲輸入& substr)不是處理HEIGHT3變量的最簡單方法。 在數學公式中查找字符變量時,可以使用SAS應用的自動字符進行數字轉換。

在以下代碼中,heightft公式將觸發此轉換,自動處理前導空格。

data test; 
    height3= ' 508'; 
    heightft= int(height3/100); 
    heightin= height3-(heightft*100); 
run; 

因爲如果你使用輸入()函數的非數字字符在height3變量的存在將導致準確缺失值。

+0

您也可以使用'cats()' - 最通用和最短的功能。國際海事組織自動類型轉換是一個可怕的想法,因爲他們可以隱藏其他錯誤,如錯別字。使用它們類似於編寫錯誤代碼。 –

+0

羅伯特,即使我通常使用更明確的轉換,但不認爲自動的隱藏任何東西。將一個帶有拼寫錯誤(例如「50k8」)的參數傳遞給'input()'和一個數學公式會在日誌中產生相同的信息。 '注意:無效數據'後面跟着一個值爲'height3 = 50k8 heightft ='的列表。 _ERROR_ = 1 _N_ = 1'。 – DaBigNikoladze

相關問題