如何使用SAS哈希对象?

如何使用SAS哈希对象?,sas,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 th

我试图在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:变量qtrnum被定义为字符和数字


我试图删除set语句,但仍然无法调试它。如何改进代码

您的call missing语句正在将
qtrnum
初始化为数值,而set语句正在尝试将其作为字符读入。您可以通过在长度语句中添加
qtrnum$8.
将其设置为数值

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