全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1696 3
2017-11-06
悬赏 5 个论坛币 未解决
下面程序是我的思路,但问题是var1-100里面有数字型有字符型,无法在一个数组共存。
(如果逐个变量判断类型再分两个数组分别计算感觉不优雅)

%let checkList=var1 var2 ... var100;
/*先假设所有列是missing,如果有一列不是missing就不再判断剩余变量*/
data out;
        set in;
        MISSING=1;
        array arr(*) &checkList;

        do i=1 to dim(arr);
                if missing(arr)=0 then
                        do;
                                MISSING=0;
                                leave;
                        end;
        end;
run;


于是我打算用scan函数,但得到变量名的字符串以后,不知道怎么转成变量名,也就是说下面红色字体如何得到var的变量名?
%let checkList=var1 var2 ... var100;

data out;
        set in;
        MISSING=1;
        i=0;
        do until(var=' ');
                i+1;
                var=scan(“&checkList”,i);
                if missing(somefunction(var))=0 then
                        do;
                                MISSING=0;
                                var=' ';
                        end;
        end;
run;


最后的问题是,不管我的思维方式,正常的程序员是如何解决这个问题的:即判断N个变量的值,如果有一个变量的值不是missing,就判断为xxx,并且无需判断剩余变量;如果所有变量都是missing,就判断为yyy。

二维码

扫码加我 拉你入群

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

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

全部回复
2017-11-6 22:43:22

还有一个问题,下面的程序,leave是跳出哪个do?
data out;
        set in;
        MISSING=1;
        array arr(*) &checkList;

        do i=1 to dim(arr);
                if missing(arr)=0 then
                        do;
                                MISSING=0;
                                leave;
                        end;
        end;
run;
二维码

扫码加我 拉你入群

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

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

2017-11-7 09:47:45
你绕了好大一圈
附件列表
temp.jpg

原图尺寸 31.42 KB

temp.jpg

temp.jpg

原图尺寸 31.42 KB

temp.jpg

二维码

扫码加我 拉你入群

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

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

2017-11-7 19:40:15
多谢楼上,我用了cmiss函数来判断一群变量是否都是missing还是没有missing还是包含missing。

data _temp1;
                set ∈
                length JUDGE $12.;
                MISSING=cmiss(&varList);

                if MISSING>=&varListCount then
                        JUDGE='all missing';
                else if MISSING<&varListCount then
                        JUDGE='not all';
                else if MISSING=0 then
                        JUDGE='no missing';
                else JUDGE='other';
        run;
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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