全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
9334 7
2011-10-12
data _null_;
  length k d $10;
  if _n_=1 then do;
      declare hash h()
      h.definekey('k');
      h.definedata('d');
      h.definedone();
      call missing('k','d');   /*有什么用?帮助中“avoid unintialized variable notes”不理解具体*/
  end;
  set ....
run;

1/ call missing 在_n_=1时只执行一次,并且是在hash对象声明结束之后,应该不会对构造hash表有影响。
    在版主《sas编程与数据挖掘商业案例》p206提到:“可以实现在没有找到匹配值的时候返回一个空值,如果
    没有此选项,系统将会用hash表当前观察之前最近一条值替代当前观察”。想不明白,为什么call missing 不影响
    hash表构建,同时只执行一次为什么会起到这样作用?如果是“怕引用前一条值”至少也应该放到if外面。
    另外,hash表find时返回的是地址,如果hash表中无相应key值时,应该是不指向任何数据,也即自动返回缺失,
    在《programming 3 couse notes》P6-24中的6.05题及6-101的解释中,如果找不到key会返回data步对该变量的初始化值,
    而与hash表的前一条记录无关,因此即使要用貌似放在if外更合理点!
2/ call missing 应该只在执行时起作用,而不像drop在初始化时,因此不明白只执行一次有什么作用?
3/ 如果将call missing 放在if条件外同上面有区别吗?
    data _null_;
      length k d $10;
      if _n_=1 then do;
          declare hash h()
          h.definekey('k');
          h.definedata('d');
          h.definedone();
      end;
      call missing('k','d');   /*放在if外同上面有区别吗?*/
      set ....
    run;
琢磨了半天,还是不明白,望高人指点迷津!多谢了!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2012-2-4 11:28:53
怎么没牛人回答啊,我也正想知道这个问题
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-2-19 01:27:20
以前公司的同事喜欢用HASH,但是后来都改用FORMAT了
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-11-4 10:41:17
初始化用的.如果不这样做,当sas找不到hash对象的时候就会报一个log.
The hash object does not assign values to key variables, and the SAS compiler cannot
detect the implicit key and data variable assignments done by the hash object.
Therefore, if no explicit assignment to a key or data variable appears in the program,
SAS issues a note stating that the variables are uninitialized.
To avoid receiving these notes, you can use the CALL MISSING routine with the key and
data variables as parameters. The CALL MISSING routine assigns a missing value to
the specified character or numeric variables.
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-12-26 20:45:21
百度call missing看到这贴。以下仅为个人之见,不一定对!

Q:1/ call missing 在_n_=1时只执行一次...;
A: _n_=1是指data _null_中的第一个观测,来自于后面的set语句,如果set接了个数据集有10个观测,do...end中的语句,要执行10次,hash表是动态的,也将定义10次;也就是每读set数据集中每一条观测,_n_复位到1;call missing在definedone之后,与hash表无关;


Q:call missing ...不明白只执行一次有什么作用?
A:call missing不止执行1次,执行多少次取决于set的数据集有多少条观测;


Q:如果将call missing 放在if条件外同上面有区别吗?
A:当然有区别,放在end里和外,执行次数不一样。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-12-26 20:47:24
附加回答个问题
“版主《sas编程与数据挖掘商业案例》p206提到:“可以实现在没有找到匹配值的时候返回一个空值,如果
     没有此选项,系统将会用hash表当前观察之前最近一条值替代当前观察”。想不明白...”

从PDV角度去想想,大概就那么回事吧。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群