请选择 进入手机版 | 继续访问电脑版
楼主: fanzai1hao
904 9

简单程序疑问,悬赏十个论坛币! [推广有奖]

  • 0关注
  • 38粉丝

讲师

58%

还不是VIP/贵宾

-

威望
0
论坛币
7183 个
通用积分
19.4861
学术水平
17 点
热心指数
38 点
信用等级
15 点
经验
33245 点
帖子
189
精华
0
在线时间
656 小时
注册时间
2010-5-14
最后登录
2024-4-18

fanzai1hao 学生认证  发表于 2015-4-2 23:55:01 |显示全部楼层 |坛友微信交流群
10论坛币
QQ截图20140402234727.jpg
首先是有股票2302118 个关于前收盘价,今收盘价和涨跌的数据。
目的在于找出今收盘价减去前收盘价不等于涨跌的股票数据(即找出除息除权的股票)


我写的程序为:


data new;                                                                                                                              
set stock;                                                                                                                              
if CHG^=TCLOSE-LCLOSE then output new;                                                                                                   
run;   

运行后结果为
NOTE: 从数据集 WORK.STOCK. 读取了 2302118 个观测
NOTE: 数据集 WORK.NEW 有 2192439 个观测和 5 个变量。
NOTE: “DATA 语句”所用时间(总处理时间):
      实际时间          1.01 秒
      CPU 时间          0.95 秒

QQ截图20140402235300.jpg


明显可以看出表中今收盘价减前收盘价是等于涨跌的,并没有得到想要的结果,请大神们赐教~~~~~









最佳答案

jl60156 查看完整内容

it is due to precision. data new; set stock; if abs(CHG-(TCLOSE-LCLOSE)) gt 0.0000001 then output new; ...
关键词:论坛币 output Stock Close outpu 程序
jl60156 发表于 2015-4-2 23:55:02 |显示全部楼层 |坛友微信交流群
it is due to precision.

data new;                                                                                                                              
set stock;                                                                                                                              
if abs(CHG-(TCLOSE-LCLOSE)) gt 0.0000001 then output new;                                                                                                   
run;  

使用道具

fanzai1hao 学生认证  发表于 2015-4-3 07:49:39 来自手机 |显示全部楼层 |坛友微信交流群
jl60156 发表于 2015-4-3 01:19
it is due to precision.

data new;                                                                 ...
不大懂,tclose和lclose都只有两位小数,相减也只有两位小数,怎么会和精度有关呢,求详解~~~

使用道具

fanzai1hao 学生认证  发表于 2015-4-4 10:18:31 |显示全部楼层 |坛友微信交流群
jl60156 发表于 2015-4-3 01:19
it is due to precision.

data new;                                                                 ...
大神你在不在啊,求指导啊~~~~~~

使用道具

teqel 发表于 2015-4-5 00:27:03 来自手机 |显示全部楼层 |坛友微信交流群
fanzai1hao 发表于 2015-4-3 07:49
不大懂,tclose和lclose都只有两位小数,相减也只有两位小数,怎么会和精度有关呢,求详解~~~
你以为只有两位精度,但其实里面是个高精度的(8字节)浮点数。可以自己减一下二者,看看结果是不是等于0

使用道具

fanzai1hao 学生认证  发表于 2015-4-5 00:36:00 |显示全部楼层 |坛友微信交流群
teqel 发表于 2015-4-5 00:27
你以为只有两位精度,但其实里面是个高精度的(8字节)浮点数。可以自己减一下二者,看看结果是不是等于0
还真不等于0,可问题出在哪儿呢?数据的原始输入问题?还是sas系统自己运算的问题?那岂不用sas等特别小心,每次要用abs函数或round函数来处理?

使用道具

teqel 发表于 2015-4-6 01:56:36 |显示全部楼层 |坛友微信交流群
fanzai1hao 发表于 2015-4-5 00:36
还真不等于0,可问题出在哪儿呢?数据的原始输入问题?还是sas系统自己运算的问题?那岂不用sas等特别小心 ...
浮点数精度问题,是数值计算的一个基本问题,和SAS无关,可以自己搜索一下

使用道具

jl60156 发表于 2015-4-6 08:49:56 |显示全部楼层 |坛友微信交流群
fanzai1hao 发表于 2015-4-3 07:49
不大懂,tclose和lclose都只有两位小数,相减也只有两位小数,怎么会和精度有关呢,求详解~~~
take a look at the following reference


http://support.sas.com/documentation/cdl/en/lrcon/62955/HTML/default/viewer.htm#a000695157.htm

使用道具

fanzai1hao 学生认证  发表于 2015-4-6 11:18:43 |显示全部楼层 |坛友微信交流群
teqel 发表于 2015-4-6 01:56
浮点数精度问题,是数值计算的一个基本问题,和SAS无关,可以自己搜索一下
好的,谢谢大神指导~

使用道具

fanzai1hao 学生认证  发表于 2015-4-6 11:19:25 |显示全部楼层 |坛友微信交流群
jl60156 发表于 2015-4-6 08:49
take a look at the following reference
太赞了,十分感谢~~~~

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-19 09:39