楼主: harlon1976
1583 7

[原创博文] 请教这个程序 [推广有奖]

  • 2关注
  • 27粉丝

版主

院士

54%

还不是VIP/贵宾

-

威望
1
论坛币
33781 个
通用积分
135.1232
学术水平
25 点
热心指数
39 点
信用等级
17 点
经验
59249 点
帖子
1928
精华
0
在线时间
4352 小时
注册时间
2005-8-27
最后登录
2025-12-9

楼主
harlon1976 发表于 2010-4-5 11:36:15 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
比如数据集A中有 48个观测,每连续3个一组,这样总共有48-3+1=46组,现从中抽取48个观测,从46组中随机抽一组,这样得到3个观测,然后再抽第二组,这样一直下去总共抽16次即可,这里考察重复抽样,也就是有的组可能多次被抽,为此编写的程序如下:

data a;

do i=1
to
48;

x=normal(0);

output;

end;

data b;

set a;

do j=1
to
16;

k=int(1+46*uniform(0));

if k le i and i le k+2
then
output;

end;

proc
print;run;
数据集b中的结果与事先预想的结果不一样,请问这个程序错在什么地方,如何编写满足上述要求的 程序,叩谢。
二维码

扫码加我 拉你入群

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

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

关键词:Uniform output normal outpu print normal 程序 如何

回帖推荐

crackman 发表于2楼  查看完整内容

data crackman; do i=1 to 48; x=normal(0); output; end; run; data crackman(drop=n i where=(z^=. and obs=1)); set crackman; y=lag(x); z=lag(y); n=int(uniform(23)*100); if n>=3 and n

soporaeternus 发表于3楼  查看完整内容

data步可以搞定的,这个比较直观......希望是对的

本帖被以下文库推荐

沙发
crackman 发表于 2010-4-5 12:26:42
data crackman;
do i=1 to 48;
x=normal(0);
output;
end;
run;
data crackman(drop=n i where=(z^=. and obs=1));
set crackman;
y=lag(x);
z=lag(y);
n=int(uniform(23)*100);
if n>=3 and n<46 then obs=1 ;
else obs=0;
run;
proc sql;
create table w1 as select x from crackman;
insert into w1  select y from crackman;
insert into w1  select z from crackman;
quit;
已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
bakoll + 3 + 3 精彩帖子
anzhiliang + 1 + 1 + 1 精彩帖子

总评分: 经验 + 3  论坛币 + 3  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

藤椅
soporaeternus 发表于 2010-4-5 22:16:55
  1. data a;
  2.         do i=1 to 48 by 1;
  3.                 output;
  4.         end;
  5. run;

  6. data b;
  7.         do i=1 to 16 by 1;
  8.                 x=ceil(ranuni(0)*46);
  9.                 output;
  10.         end;
  11. run;

  12. proc sql;
  13.         create table c as
  14.                 select
  15.                         b.x
  16.                         ,a.i
  17.                 from        b  inner join a
  18.                 on                0<=a.i-b.x<=2
  19.         ;
  20. quit;
复制代码
data步可以搞定的,这个比较直观......希望是对的
Let them be hard, but never unjust

板凳
soporaeternus 发表于 2010-4-5 22:17:28
  1. data a;
  2.         do i=1 to 48 by 1;
  3.                 output;
  4.         end;
  5. run;

  6. data b;
  7.         do i=1 to 16 by 1;
  8.                 x=ceil(ranuni(0)*46);
  9.                 output;
  10.         end;
  11. run;

  12. proc sql;
  13.         create table c as
  14.                 select
  15.                         b.x
  16.                         ,a.i
  17.                 from        b  inner join a
  18.                 on                0<=a.i-b.x<=2
  19.         ;
  20. quit;
复制代码
data步可以搞定的,这个比较直观......希望是对的
已有 2 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子
crackman + 100 值得学习

总评分: 经验 + 3  论坛币 + 103   查看全部评分

Let them be hard, but never unjust

报纸
醉_清风 发表于 2010-4-6 10:55:45
学习了 不错 ON也可以这样写
从来不需要想起 永远也不会忘记

地板
crackman 发表于 2010-4-6 11:27:56
确实厉害,学习了

7
viterbi 发表于 2010-4-6 11:35:47
不错  学习了

8
harlon1976 发表于 2010-4-6 20:21:39
看来SQL过程很重要,在我所问的几个问题中,几乎无一例外都要使用这个过程,是应该看看这个过程了,谢谢3楼兄弟的热心帮助。

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

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