楼主: yzzhang
9296 7

创建hash对象时call missing是什么作用? [推广有奖]

  • 1关注
  • 0粉丝

已卖:93份资源

博士生

52%

还不是VIP/贵宾

-

威望
0
论坛币
1979 个
通用积分
2.9500
学术水平
2 点
热心指数
1 点
信用等级
0 点
经验
569 点
帖子
116
精华
0
在线时间
459 小时
注册时间
2009-2-17
最后登录
2025-12-15

楼主
yzzhang 发表于 2011-10-12 11:18:40 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
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;
琢磨了半天,还是不明白,望高人指点迷津!多谢了!
二维码

扫码加我 拉你入群

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

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

关键词:missing Miss SSIN HASH call null 影响

沙发
来梦来人 发表于 2012-2-4 11:28:53
怎么没牛人回答啊,我也正想知道这个问题

藤椅
remeva 发表于 2012-2-19 01:27:20
以前公司的同事喜欢用HASH,但是后来都改用FORMAT了
已有 1 人评分热心指数 收起 理由
数据分析师3K + 1 热心帮助其他会员

总评分: 热心指数 + 1   查看全部评分

板凳
Shirubei 发表于 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.
已有 1 人评分热心指数 收起 理由
数据分析师3K + 1 热心帮助其他会员

总评分: 热心指数 + 1   查看全部评分

报纸
zhangg 发表于 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里和外,执行次数不一样。

已有 1 人评分热心指数 收起 理由
数据分析师3K + 1 热心帮助其他会员

总评分: 热心指数 + 1   查看全部评分

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

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

7
wangfengxi 发表于 2013-4-4 22:38:21
initialize variable to missing

8
罐头橘 发表于 2023-6-7 15:45:44
     ”在版主《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外更合理点! “

完全是我的疑问我理解的是length+call missing只是搭了一个空变量给hash表进来,call missing放if里是因为节省跑一次就够了,放外面其实没影响。
这个call missing会影响到hash表观察结果吗?

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-3 23:24