楼主: mzyoung
33795 19

sas中如何把年月日日期截取月份,并改为连续的数字? [推广有奖]

11
mzyoung 在职认证  发表于 2014-2-24 13:07:55
mingfeng07 发表于 2014-2-23 22:41
你的意图我不是很明白,你试试这个
%macro mad;
%do i=1 %to 31;
嗯,谢谢,上午重新看sas程序书时也想到了这个方法,用宏把每3个月的数据分配到一个数据集,然后按股票代码来统计基本变量。非常感谢你的热心帮助

12
mzyoung 在职认证  发表于 2014-2-24 13:09:22
mingfeng07 发表于 2014-2-23 22:41
你的意图我不是很明白,你试试这个
%macro mad;
%do i=1 %to 31;
我是菜鸟级别,还在学习中,希望今后多多指点

13
mzyoung 在职认证  发表于 2014-2-24 23:33:30
mingfeng07 发表于 2014-2-23 22:41
你的意图我不是很明白,你试试这个
%macro mad;
%do i=1 %to 31;
您好,再请教一个问题:现在已得到3个月1组的数据集,可以按代码来统计变量了。现在还想按代码统计一个变量:{∑[(r1-r1的均值)*(r2-r2的均值)^2]}/{∑(r2-r2的均值)^3 },r1和r2分别为两个变量。
目前只会依据proc means按代码分组统计r1和r2的均值,并且把它输到一个数据库,这样一来就不懂得怎么计算那个变量了。
  data data.sj_&i;
    set data.sj_&i;
       a=r1-mean(r2);/*错误:mean、sum在这种情况下只能是对行向量统计,无法对列向量统计;但是若要统计列向量的均值,就用到了proc sql或者proc means语句,这样就把它们输到另一个(B)数据集了,原数据集(A)与B的关系是:多个资产3个月的日数据(多条)与多个资产3个月的均值(每个资产一条数据)相对应,不知道怎么统计了*/
       b=(r2-mean(r2))**2;
       c=(r2-mean(r2))**3;
       sk=sum(a*b)/sum(c);
       by code;
       drop a b c;
   run;
求解,谢谢。

14
mzyoung 在职认证  发表于 2014-2-24 23:54:48
mingfeng07 发表于 2014-2-23 22:41
你的意图我不是很明白,你试试这个
%macro mad;
%do i=1 %to 31;
可以利用转置吗?

15
mzyoung 在职认证  发表于 2014-2-25 09:23:33
mingfeng07 发表于 2014-2-23 22:41
你的意图我不是很明白,你试试这个
%macro mad;
%do i=1 %to 31;
转置好像也不行,转置之后,每条记录是各资产的3个月的日数据,但每个资产3个月的交易天数可能不一样(缺失的交易数据已被我删除)

16
mingfeng07 学生认证  发表于 2014-2-25 10:45:33
我不知道有没有领会错你的意思,代码如下:
proc sql;
select sum(sumr1*(sumr2**2))/sum((sumr2**3)) as sk from(
select r1,avg(r1) as avgr1,r1-calculated avgr1 as sumr1,r2,avg(r2) as avgr2,r2-calculated avgr2 as sumr2 from xxx);
quit;
欢迎扫一扫我头像关注, 不定期分享SAS技术知识。

17
mingfeng07 学生认证  发表于 2014-2-25 10:57:54
如果是多个code的话,那代码如下:
proc sql;
select code,sum(sumr1*(sumr2**2))/sum((sumr2**3)) as sk from(
select code,r1,avg(r1) as avgr1,r1-calculated avgr1 as sumr1,r2,avg(r2) as avgr2,r2-calculated avgr2 as sumr2 from b group by code) group by code;
quit;
欢迎扫一扫我头像关注, 不定期分享SAS技术知识。

18
mzyoung 在职认证  发表于 2014-2-25 11:48:38
mingfeng07 发表于 2014-2-25 10:57
如果是多个code的话,那代码如下:
proc sql;
select code,sum(sumr1*(sumr2**2))/sum((sumr2**3)) as sk ...
嗯,谢谢。
正在试着把结果导出到数据集,是不是只有create table一种方法?PROC sql好像没有output选项。。。
proc sql noprint;
create table sjcl.cl1003_1 (code CHARACTER(6),sk num) as
select code,sum(sumlnri*(sumlrm**2))/sum((sumlrm**3)) as sk from(
select code,lnri,avg(lnri) as avglnri,lnri-calculated avglnri as sumlnri,lrm,avg(lrm) as avglrm,lrm-calculated avglrm as sumlrm from sjcl.sjcl1003_1 group by code) group by code;
quit;
ERROR: 正在创建的表的 SAS 数据集选项可能不包括列定义

19
mzyoung 在职认证  发表于 2014-2-25 13:37:38
mingfeng07 发表于 2014-2-25 10:45
我不知道有没有领会错你的意思,代码如下:
proc sql;
select sum(sumr1*(sumr2**2))/sum((sumr2**3)) as ...
非常感谢。在这个问题https://bbs.pinggu.org/thread-2917795-1-1.html的回复中,另一个朋友也提供了解决方法,你俩的计算结果一致。感激不尽,祝好!

20
mingfeng07 学生认证  发表于 2014-2-25 18:38:28
如果你想得到output,只需要procsql;select xxx;quit;
如果你想得到report,则需要proc sql;create table xx as select xxx;quit;没有必要对表进行定义
已有 1 人评分论坛币 收起 理由
Still.. + 50 精彩帖子

总评分: 论坛币 + 50   查看全部评分

欢迎扫一扫我头像关注, 不定期分享SAS技术知识。

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

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