SAS中文论坛

标题: 求教一段sas程序的问题 [打印本页]

作者: shiyiming    时间: 2010-11-19 23:16
标题: 求教一段sas程序的问题
程序跑不通,特来求教
希望实现的目的是把一条记录重复成多条记录
具体如下,有数据集a,有两个变量a和b
a  b
1  1.1
2  0.9
3  0.8
4  0.7
5  1.2
6  1.4
希望把数据集a中的每一条记录重复成多条记录,至于是“多少条”,取决于“变量b”和“0”的差值,例如第一条记录b=1.1,我就希望把该记录重复11次(从0到1.1,步长0.1),
同理第二条记录,b=0.9,需要重复9次(从0到0.9,步长0.1)
于是编程如下,但是遇到一个问题,当b=0.8,0.9或1.1时,程序运行有问题(0.8时记录重复9次,0.9时重复10次),b为其他值的时候就没有问题,很奇怪。
data a;
input a b;
cards;
1 1.1
2 0.9
3 0.8
4 0.7
5 1.2
6 1.4
;
run;

data b;
set a;
do i=0 to 1.5 by 0.1;
if b>i then do;
d=0;
end;
else do;d=1;output;leave;end;
put a b i d;
output;
end;
run;
希望版上高手帮我解析一下问题出在哪里。
我相信各位肯定会想出比这个简单的方法来可以实现相同目的,非常乐意学习,不过我还是想了解一下自己这段程序为什么出错了。。。
先谢谢啦
作者: shiyiming    时间: 2010-11-20 00:52
标题: Re: 求教一段sas程序的问题
笑翻了,比猪头还糊涂,从0到1.1,步长0.1,是一共重复11次吗?
至于浮点数比较的问题,坛子里的各位大师回答过好几次,原因见
<!-- m --><a class="postlink" href="http://www.nesug.org/Proceedings/nesug08/ff/ff07.pdf">http://www.nesug.org/Proceedings/nesug08/ff/ff07.pdf</a><!-- m -->

你的程序已经写得够好啦,猪头试了下连十行都省不下来。
[code:2re0sk5h]
data b;
        set a;
        do i=0 by 0&#46;1 until (d);
                d = (round(i,&#46;1) &gt;= round(b,&#46;1));
                output;
        end;
run;
[/code:2re0sk5h]
作者: shiyiming    时间: 2010-11-20 09:47
标题: Re: 求教一段sas程序的问题
有赠品? 好好研究下 <!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->
作者: shiyiming    时间: 2010-11-20 14:20
标题: Re: 求教一段sas程序的问题
to 死猪头
3ks
原来如此啊~~
你的程序写的简单多了,决定用你的~
另外,更正一下,0到1.1,步长.1,是重复12次, 哈哈。




欢迎光临 SAS中文论坛 (https://mysas.net/forum/) Powered by Discuz! X3.2