楼主: 百草园Tracy
3133 15

数据处理的 的break point [推广有奖]

11
百草园Tracy 发表于 2010-3-12 12:54:39
本身啥问题?
那不用lag函数,能用别的什么函数么?

我觉得近在咫尺了,但是找不到出路。。。

12
soporaeternus 发表于 2010-3-12 13:11:40
我想我之前的代码可以完成啊,有什么问题?
Let them be hard, but never unjust

13
百草园Tracy 发表于 2010-3-12 13:49:08
有100多个公司,
那个代码弄起来好像挺麻烦的。。。。

14
soporaeternus 发表于 2010-3-12 13:54:52
直接运行宏,选择差分阶数,之前的代码仅仅是个测试集......
应该不要"弄"的...
Let them be hard, but never unjust

15
百草园Tracy 发表于 2010-3-12 14:17:24
soporaeternus 发表于 2010-3-12 13:54
直接运行宏,选择差分阶数,之前的代码仅仅是个测试集......
应该不要"弄"的...
我试了下,果然成功解决!
%MACRO T(i);
        data a_&i;
                set b_2;
                by conm fyear;
                if first.conm then do;
                        i=0;
                end;
                i+1;
                dif&i=dif&i(oancf)
                if i<=&i then dif&i=.;
                drop i;
        run;
%MEND T;
%T(1);

还有一个地方不懂:如果差分结果只是一个中间变量需要dif&i(oancf)-dif&i(ch)-ch的话,这样怎么编辑呢?

%macro这块我看了半天都不是很懂。。。

16
百草园Tracy 发表于 2010-3-14 04:02:19
bobguy 发表于 2010-3-12 12:32
百草园Tracy 发表于 2010-3-11 14:58
数据大概是长这种样子的,有很多个公司,然后每个公司有一定长度的时间序列
时间  公司名称  其他变量
1991 公司A
1992 公司A
1993 公司A
1994 公司A
1991 公司B
1992 公司B
1993 公司B
1994 公司B
1991 公司C
1992 公司C
1993 公司C
1994 公司C

如果要对每个公司的时间序列上的变量进行处理,计算新的变量,比如说一阶差分,lag,怎么样才能按照公司来呢

Data a;
set b;
var1=dif(c)-dif(d) Var2=lag(c);
run;

如果这样运行的话 会把公司的数据混起来,怎么才能按照公司来呢?
Hope this is what you need.

data o;
  do c='a','b','c';
   do year=1994 to 1998;
      n+1;
      output;
   end;
  end;
run;

data o2;
   set o;
   by c;
   diff=dif(n);
   if first.c then diff=.;
run;

proc print; run;
刚发现这个方法也可以的,谢谢了!

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

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