如何使用SAS哈希对象?

时间:2014-12-06 18:10:57

标签: 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语句,但仍然无法调试它。我该如何改进我的代码?

1 个答案:

答案 0 :(得分:2)

您的调用缺失语句将qtrnum初始化为数字,而set语句尝试将其作为字符读取。您可以通过在长度语句中添加qtrnum $8.将其设置为数字。

然后您会发现您有一个额外的错误,因为SAS期望哈希表上有两个键。我认为你打算做的是goal.definedata ("GoalAmount");。这将告诉SAS将您指定的数据值加载到GoalAmmount,而不是尝试将其作为关键变量进行匹配。