全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2839 4
2014-10-14
产生10个 1到365的随机数,想判断这十个数中是否有重复,有则令b为1,将这一过程重复10次。程序如下:
data d(drop=k i j t);
array y(10);
do t=1 to 10;
array x(10);
do k=1 to 10;      
x(k)=int(365*uniform(0)+1);
end;
output;
do i=1 to 9;
do j=i+1 to 10;
b=x(i)=x(j);
if b=1 then goto k;
end;
end;
k:y(t)=b;
end;
run ;
proc print;run;

为什么结果第一行的b是缺失值??

附件列表
捕获.PNG

原图尺寸 9.9 KB

捕获.PNG

二维码

扫码加我 拉你入群

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

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

全部回复
2014-10-15 17:02:14
你好!你的output语句应该放在最后一个end之前,这样才能保证这一个data步总所有pdv中的值得以输出;你的output放在数组赋值之下,这样在输出中只输出当前pdv中数组的值,而b的值是上一步data循环下来的滞留值(实际上如果你的b值有一个为1你就会发现b=1这一行并没有重复值,有重复值的是上一行)。这也解释了为什么你的第一个b值为缺失。这是output语句的一个特殊性质,你可以参考一下相关资料,你需要的程序应该为酱紫的(由于你只需要b值,所以这里也对你的程序做了简化):
data d(drop=k i j t v);
do t=1 to 10;
array x(10);
do k=1 to 10;      
x(k)=int(365*uniform(0)+1);
end;

do i=1 to 9;
do j=i+1 to 10;
b=x(i)=x(j);
if b=1 then goto k;
end;
end;
k:v="find";
output;
end;

run ;
proc print;run;
二维码

扫码加我 拉你入群

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

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

2014-10-15 22:40:44
把output;放到k:y(t)=b;后面就可以了……沙发正解的。
二维码

扫码加我 拉你入群

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

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

2014-10-26 11:32:42
magician1943 发表于 2014-10-15 17:02
你好!你的output语句应该放在最后一个end之前,这样才能保证这一个data步总所有pdv中的值得以输出;你的ou ...
谢谢!!!!!了解了!
二维码

扫码加我 拉你入群

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

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

2014-10-26 11:33:18
xiuzhenning 发表于 2014-10-15 22:40
把output;放到k:y(t)=b;后面就可以了……沙发正解的。
谢谢~~~~~
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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