我试图在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语句,但仍然无法调试它。我该如何改进我的代码?
答案 0 :(得分:2)
您的调用缺失语句将qtrnum
初始化为数字,而set语句尝试将其作为字符读取。您可以通过在长度语句中添加qtrnum $8.
将其设置为数字。
然后您会发现您有一个额外的错误,因为SAS期望哈希表上有两个键。我认为你打算做的是goal.definedata ("GoalAmount");
。这将告诉SAS将您指定的数据值加载到GoalAmmount
,而不是尝试将其作为关键变量进行匹配。