如何使用SAS哈希对象?
我试图在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
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
,而不是尝试将其作为关键变量进行匹配