减少compcost中的操作值会增加gedscore?

时间:2013-12-27 23:10:22

标签: sas

我担心我遇到以下情况:

方法1:

proc sql;
create table as
...
compged(a.plan_id, b.plan_id,&maxscore.,'iL') as gedscore
from view_a a, view_b b
where a.state = b.state and calculated gedscore < &maxscore.
order by calculated gedscore;

这很有效,一切都很好,但是我想用compcost稍微调整一下我的结果。所以我采用方法2:

proc sql;
create view tempview as select
...
from view_a a, view_b b
where a.state = b.state;
quit;
data modified_gedscore
set tempview;
if _N_ = 1 then call compcost('delete=',10,'truncate=',10);
gedscore = compged(el_plan, clms_plan,&maxscore.,'iL');
if gedscore < &maxscore.;
run;

还有一点,但我试图隔离相关的位。我试图降低操作删除和截断的成本(考虑到我正在使用的数据和我想要完成的事情,这是有意义的)。我的预期结果将是由于删除和截断操作具有较低的成本,更多的观察将具有gedscore&lt; &安培; maxscore。但是,我担心我会看到以下情况:呼叫compcost实际上大大减少了我看到的观察次数。关于call compcost如何工作,我是否有一个基本的误解?如果上述内容不正确,我如何调整compged以删除字符更有可能落在maxscore阈值之下?

编辑:另外,我知道两种方法的不同结构会增加调用compcost之外的其他东西导致意外结果的可能性,但如果我只是注释掉调用compcost行,我得到的结果与Method中的结果相同那么,没有。

Edit2:示例数据。第一次观察是等效的(0)。第二种方法2下的gedscore比方法1更高,即使删除和截断的compcost已经降低,没有其他更改。

data sample_data;
input state1 $ plan1 $ plan2 $;
datalines;
ID DENTAL DENTAL
GA GBHC GBCH
;

Edit3:我想我可能已经找到了问题。似乎默认的合并成本(here)与默认的合并成本(here)不同。调用compcost时,所有未指定的操作都将设置为compcost默认值,通常更高。如果有人想确认,请随意。

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

问题是COMPGED没有使用SWAP成本,而只使用DELETE和INSERT(后者的成本为100)。这是因为CALL COMPCOST的工作原理;出于某种原因(这对我来说没什么意义),CALL COMPCOST的默认值不等于COMPGED的默认值 - 并且它会将默认值插入到您未指定的每个其他操作中

为了使这项工作,看起来你必须为你想要它使用的所有东西指定一个值,特别是APPEND,BLANK,PUNCTUATION,SINGLE,SWAP和TRUNCATE(后者)你已经指定了)。从doc开始,从9.2开始,COMPGED的默认值为50,10,30,20,20,10。

在你的例子中:

data sample_data;
input state1 $ plan1 $ plan2 $;
call compcost('del=',10,'truncate=',10,'swap=',20);
compged_1 = compged(plan1,plan2,'il');
put compged_1=;
datalines;
ID DENTAL DENTAL
GA GBHC GBCH
;
run;

现在返回20而不是110。