楼主: dxystata
952 6

[问答] 为什么出现变量 nmiss 未初始化 [推广有奖]

版主

大师

34%

还不是VIP/贵宾

-

TA的文库  其他...

Software

中英文Ebook

R学习

威望
2
论坛币
182303 个
通用积分
15205.6089
学术水平
208 点
热心指数
271 点
信用等级
174 点
经验
291306 点
帖子
5378
精华
1
在线时间
13479 小时
注册时间
2006-6-21
最后登录
2024-4-28

初级学术勋章 初级热心勋章 中级热心勋章 初级信用勋章

50论坛币
  1. data aaa;
  2. input group n;
  3. cards;
  4. 1 0
  5. ;
  6. run;

  7. data bbb;
  8.         set aaa;
  9.         length  grpcat $50. grp2 $50.;
  10.         do k=1 to 2;
  11.                 if k=1 then grpcat="N(Nmiss)";
  12.                 if k=2 then grpcat="Mean±Std";
  13.                 if n ne 0 then do;
  14.                         if k=1 then grp2=strip(put(n,8.0))||"("||strip(put(nmiss,8.0))||")";
  15.                 end;
  16.                 else do;
  17.                         if k=1 then grp2=strip(put(n,8.0));
  18.                 end;        
  19.         output;               
  20.         end;        
  21. run;
复制代码
问题:
1. 为什么出现变量 nmiss 未初始化?
2. 为什么结果k=2时grp2的值为0,应该为缺失啊。

如何解决这两个问题? 谢谢!

关键词:Miss Iss MIS length output
沙发
dxystata 发表于 2022-4-4 15:54:17 |只看作者 |坛友微信交流群
data aaa;
input group n;
cards;
1 0
;
run;

data bbb;
        set aaa;
        length  grpcat $50. grp2 $50.;
        do k=1 to 2;
                if k=1 then grpcat="N(Nmiss)";
                if k=2 then grpcat="Mean±Std";
                if n ne 0 then do;
                        if k=1 then grp2=strip(put(n,8.0))||"("||strip(put(nmiss,8.0))||")";
                end;
                else do;
                        if k=1 then grp2=strip(put(n,8.0));
                end;       
        output;               
        end;       
run;

使用道具

藤椅
dxystata 发表于 2022-4-4 15:54:56 |只看作者 |坛友微信交流群
grpcat 和 grp2 为字符

使用道具

板凳
橙红的果士 学生认证  发表于 2022-4-8 16:14:15 |只看作者 |坛友微信交流群
第一个问题还是比较简单的,就是在原始数据集中没有这个nmiss变量,你在length中也没有定义,直接拿来转换数据格式当然会报未初始化;
第二个问题就比较复杂了,我跑了一下你的代码,按照你的逻辑确实不应该出现0,我在想是不是跟循环有关;
          SAS在常规读入数据集的时候会在读完一行后将所有变量全部置空后再读取下一行;
          那在循环中是不是随着指针变化时,上一个循环的变量的取值不会置空,而是等着下一循环的取值进行覆盖?这样才会导致当在下一个循环中没有该变量的取值时,会把上一个循环中的值返回出来?
上面是我的猜想,我不知道实际原因,但是你可以通过else语句进行避免。
已有 1 人评分经验 学术水平 热心指数 收起 理由
dxystata + 100 + 1 + 1 热心帮助其他会员

总评分: 经验 + 100  学术水平 + 1  热心指数 + 1   查看全部评分

使用道具

报纸
橙红的果士 学生认证  发表于 2022-4-13 15:20:23 |只看作者 |坛友微信交流群
已有 1 人评分经验 学术水平 热心指数 收起 理由
dxystata + 100 + 1 + 1 热心帮助其他会员

总评分: 经验 + 100  学术水平 + 1  热心指数 + 1   查看全部评分

使用道具

地板
liujing19900321 发表于 2022-4-13 21:35:06 |只看作者 |坛友微信交流群
因为strip(put(nmiss,8.0))语句中用到了nmiss变量,nmiss这个变量确实没有被初始化。

使用道具

7
liujing19900321 发表于 2022-4-13 21:43:26 |只看作者 |坛友微信交流群
k=1时,grp2=0
k=2时,没有语句修改grp2的值,此时grp2=0

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-28 15:13