1.LENGTH和IF 0 THEN SET都是定义变量的属性,区别在于LENGTH有个CALL MISSING,这是因为通常MAIN DATASET没有我们要MERGE的变量(D),所以要用一个CALL MISSING或者赋值语句来避免LOG中出现未初始化的提示。
2. 对于两种定义方法出现的结果不同,主要还得从PDV来理解,因为在HASH OBJECT中,如果没有匹配成功(H.FIND() NE 0), PDV中的MERGE变量(D)是不会重置的,这点与MERGE方法不同(BY GROUP一改变则PDV就重置),此时MERGE变量的值就是最近一次MATCH成功的值了。个人习惯用IF 0 THEN SET这种方法来LOAD变量的属性,因为我们在没有匹配成功的时候,通常都要对MERGR变量(D)进行赋值(特定值或MISSING)。
所以在你的例子中,对于两种定义变量属性的方法,你只要在RC=H.FIND()前任意位置加上一个CALL MISSING(D),或者在RC=H.FIND()后对没有匹配的记录进行赋值(IF RC NE 0 THEN D=.)结果就一样了。