全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1260 6
2022-04-04
悬赏 50 个论坛币 未解决
复制代码
问题:
1. 为什么出现变量 nmiss 未初始化?
2. 为什么结果k=2时grp2的值为0,应该为缺失啊。

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

扫码加我 拉你入群

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

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

全部回复
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;
二维码

扫码加我 拉你入群

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

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

2022-4-4 15:54:56
grpcat 和 grp2 为字符
二维码

扫码加我 拉你入群

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

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

2022-4-8 16:14:15
第一个问题还是比较简单的,就是在原始数据集中没有这个nmiss变量,你在length中也没有定义,直接拿来转换数据格式当然会报未初始化;
第二个问题就比较复杂了,我跑了一下你的代码,按照你的逻辑确实不应该出现0,我在想是不是跟循环有关;
          SAS在常规读入数据集的时候会在读完一行后将所有变量全部置空后再读取下一行;
          那在循环中是不是随着指针变化时,上一个循环的变量的取值不会置空,而是等着下一循环的取值进行覆盖?这样才会导致当在下一个循环中没有该变量的取值时,会把上一个循环中的值返回出来?
上面是我的猜想,我不知道实际原因,但是你可以通过else语句进行避免。
二维码

扫码加我 拉你入群

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

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

2022-4-13 15:20:23
二维码

扫码加我 拉你入群

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

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

2022-4-13 21:35:06
因为strip(put(nmiss,8.0))语句中用到了nmiss变量,nmiss这个变量确实没有被初始化。
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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