全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2110 2
2016-08-16
data adsl1;
    set adsl_;
    array ca(20) (2 3 4 5 6 7 9 12 13 14 15 16 17 18 19 20 21 22 22.1 39);
    array vca(20) AGEGR4 SEX ETHNIC RACE COUNTRNM Region  BLBMIGR1 BHBA1GR1 BLDLGR1 MIHIFL CRHIFL CABGHIFL
                BHYPERFL BSUSFL BLLMFL BSTATFL  BNSLLMFL BSMKSGR1 BSMKSGR2 GFRGR1;
    length var $1000;

    do i=1 to 20;
        ord_g=ca(i);
        var=vca(i);
        output;
run;

*****************************************************************
AGEGR4 SEX ETHNIC RACE COUNTRNM Region  BLBMIGR1 BHBA1GR1 BLDLGR1 MIHIFL CRHIFL CABGHIFL BHYPERFL BSUSFL BLLMFL BSTATFL  BNSLLMFL BSMKSGR1 BSMKSGR2 GFRGR1这些都是数据集已有变量。
因为sas总是以数据集形式保存变量数据的,并不存在单独的变量(除了宏变量)。所以我就很难理解这个循环!我一直认为当do进行到i=20的时候ord_g=39;var=GFRGR1;(整列都是)那这样前面的循环就白做了!但是事实上sas跑出来跟我的想法不一样!他是存在循环的!但是我不理解!
比如说当i进行到10时,_n_=1到9的观测会不会被覆盖掉?




不知道我有没有表达清楚

二维码

扫码加我 拉你入群

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

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

全部回复
2016-8-16 11:05:06
data步从data adsl1开始第一次执行,此时_N_=1, 碰到run;之后,返回到data adsl的时候,_N_才会加1;
比如在第一次执行的时候,i=1 to 20都是在_N_=1的条件下执行的,循环里有output,所以碰到output就会输出一条记录,所以在_N_=1的条件下就会输出20条记录,循环结束,才会碰到run,此时才会返回data步的开头,然后_N_=2,继续执行,以此类推。

ps:程序里循环的那部分,output语句后面应该有一个end;
二维码

扫码加我 拉你入群

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

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

2016-8-16 11:05:43
fyp198744 发表于 2016-8-16 10:38
data adsl1;
    set adsl_;
    array ca(20) (2 3 4 5 6 7 9 12 13 14 15 16 17 18 19 20 21 22 22.1 3 ...
你每次都output生成一行数据
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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