SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 963|回复: 3
打印 上一主题 下一主题

求助:一个SAS作业不会做,求各位帮帮忙

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2008-9-18 20:58:10 | 只看该作者

求助:一个SAS作业不会做,求各位帮帮忙

问题是这样的
我们要分析一组数据
是一个人扔1000次骰子的结果
如果扔了一个五,然后再扔一个六
或者扔了一个六,再扔一个六
就重新算起
首先
data work.dice;
drop i; call streaminit(42);
do i =1 to 10000; x = ceil(rand('UNIFORM')*6);
output;
end;
run;
这样SAS就会生成一个扔了1000次的结果
然后要求我们从 work.dice里面提取两个文件,一个是work.56 另一个是work.66
里面只有一个variable叫NumRolls,表明每次扔出 56 或 66之前一共扔了多少次
如果我扔了8次
分别是3,5,6,2,2,2,5,6
那么在work.56里的NumRolls的第一个数应该是3,第二个数是5

实在是不懂怎么做
求各位大哥帮帮忙
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2008-9-19 08:01:49 | 只看该作者

Re: 求阻:一个SAS作业不会做,求各位帮帮忙

求求各位大虾路见不平,拔刀相助一下
这个作业我根据我们老师已经教了的知识完全做不来
主要是不知道怎么标示到了5,6或者6,6的时候就要停下来
求各位帮帮忙
感激不尽
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2008-9-22 11:33:11 | 只看该作者

Re: 求助:一个SAS作业不会做,求各位帮帮忙

其实以你所学的应该能做。
给你贴个56连续的吧,66的你就对着改就行了。代码是调试过的。
另外用默认随机rand调用随机数每次运行都要重置streaminit的值,否则会出现结果相同的情况。

data temp(keep=x);
        call streaminit(133);
        do
                i=1 to 1000;
                x= ceil(rand('UNIFORM')*6);
                output;
        end;
run;
--------------------------------------------------------------
data out56(keep=NumRolls);
        set temp;
        retain count;
        retain NumRolls(0);

        if count =2
                then NumRolls =0;  

        if x=5
                then count=1;
        else if (x=6 and count=1)
                then count=count+1;
        else count=0;

           NumRolls=NumRolls+1;

        if count=2;
        output;

run;
-------------------------------------------------------------       
proc print data=out56;
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2008-9-28 13:09:12 | 只看该作者

Re: 求助:一个SAS作业不会做,求各位帮帮忙

[code:3tj60ltl]data dice;
drop i; call streaminit(86);
do i =1 to 10000; x = ceil(rand('UNIFORM')*6);
output;
end;
run;

data aa;
     set dice;
         if x in (5,6) then fig=1;
         else fig=0;
         fig=lag(fig);
run;

data aa;
     set aa;
         retain sign 0;
         if x=6 and fig=1 then sign=_n_;
         sign1=lag(sign);
run;

data bb;
     set aa;
         by sign;
         if first.sign then num=sign-sign1;
run;


[/code:3tj60ltl]
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-5 01:33 , Processed in 0.069098 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表