2014-12-06 39 views
0

我試圖在SAS散列對象中定義一個鍵。但有錯誤。下面是代碼:如何使用SAS散列對象?

data sasuser.contrib ; 
input empid $ qtrnum $ amount ;   
datalines; 
e2 qtr1 11 
e3 qtr2 12 
e4 qtr3 13 
e5 qtr4 14 
e6 qtr1 15 
; 
run; 

data difference (drop = goalamount); 
length goalamount 8; 
if _N_ = 1 then do;       
declare hash goal(); 
goal.definekey ("QtrNum") ; 
goal.definekey ("GoalAmount") ; 
goal.definedone() ;       
call missing(qtrnum, goalamount) ;  
goal.add(key : 'qtr1' , data : 10) ;   
goal.add(key : 'qtr2' , data : 15) ;  
goal.add(key : 'qtr3' , data : 5 ) ; 
goal.add(key : 'qtr4' , data : 15) ; 
end; 
set sasuser.contrib ; 
goal.find() ; 
diff = amount - goalamount; 
run ; 

的錯誤是ERROR: Variable qtrnum has been defined as both character and numeric

我試圖消除SET語句,但還是沒能調試。我如何改進我的代碼?

回答

2

您的調用失蹤語句將qtrnum初始化爲數字,而set語句嘗試以字符形式讀取它。您可以通過將qtrnum $8.添加到長度聲明中將其設置爲數字。

然後你會發現你有一個額外的錯誤,因爲SAS期望散列表上有兩個密鑰。我認爲你想要的是goal.definedata ("GoalAmount");。這將告訴SAS將您指定的數據值加載到GoalAmmount中,而不是嘗試將其作爲關鍵變量進行匹配。