如果在完整的dataset中,cert的数量很多,例如13个,
那么就不能在用上面的if/else语句(否则是谁都会被折腾死)
我的方法取决与你的assignments有多少obs
1 把assignment transpose一次,然后和cert表merge,最后的表每个id对应所有的assign,这样的坏处是cert表会翻番,比如当assignment有50 个obs,(即50个科目),那么cert表就会达到2500w 行(这个merge我想大概会历时10mins~20mins);
接下来,判断a b c ... 的值就不再用if/else对每个数判断,因为这时每一个id将对应所有的assign,所以每个值将只需判断一次,结果取1和0(不能整除即为0),最后a b c 对应的值占到改行总和的比例即为其真实的贡献值
另一种方法的算法和1相同,但不用merge2个表,而是在处理cert表的datastep中手动定义array,这些array指定assignment中的值,e.g,array array_assign1[30]= ... ; 但坏处是仅仅当assignment的obs不多的时候才比较适宜