楼主: lq119067
2889 4

循环嵌套判断数组是否有重复元素 [推广有奖]

  • 0关注
  • 0粉丝

大专生

26%

还不是VIP/贵宾

-

威望
0
论坛币
684 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
120 点
帖子
13
精华
0
在线时间
79 小时
注册时间
2014-9-21
最后登录
2022-6-21

楼主
lq119067 发表于 2014-10-14 11:06:26 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
产生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是缺失值??

二维码

扫码加我 拉你入群

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

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

关键词:Uniform output array outpu print 元素

捕获.PNG (9.9 KB)

捕获.PNG

沙发
magician1943 发表于 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;

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

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

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

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 10:53