全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3005 5
2007-10-18

如:现有

Nocost
13767.11
24683.89
33111.59
41111.03
54030.38
63791.35
75361.34
81380.84
97691.02
102079.44
113890.88
12623.45
135287.07
14653
154426.4
1611651.7
171569.17
184751.24
191850.73
203267.78

第一个问题:我如果要生成一个变量m,它等于连续两个cost值得平均值。如m2=(cost1+cost2)/2 然后m3=(cost2+cost3)/2;这样一直循环下去.

第二个问题,生成一变量r;当cost得值按顺序如果成同方向变化的时候,等于0,反方向变化的时候等于1。如这里数据中cost2>cost1,如cost3>cost2,则等于0,如cost3<cost2则等于1,这个时候形成新的方向;如cost4<cost3则等于0,如cost4>cost3则等于1,依此类推循环。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2007-10-18 14:02:00
我想出来的,就是很繁琐啊 ,高级的不会没办法咯。
data a;
input x y;
cards;
1    3767.11
2    4683.89
3    3111.59
4    1111.03
5    4030.38
6    3791.35
7    5361.34
8    1380.84
9    7691.02
10    2079.44
11    3890.88
12    623.45
13    5287.07
14    653
15    4426.4
16    11651.7
17    1569.17
18    4751.24
19    1850.73
20    3267.78
;
data a1;
set a(rename=(y=y1));
x+1;
data a2;
set a1(rename=(y1=y2));
x+1;
data m1;
merge a a1 ;
by x;
m=mean(y,y1);
data m2;
set m1;
where y and y1 is not missing;
data s1;
merge a a1 a2;
by x;
if y1<y2 then do;
   if y<y1 then do;
      s=1;output;
      end;
    else do;s=0;output;end;
   end;
  else do;
   if y>y1 then do;
      s=1;output;end;
     else do;
      s=0;output;end;
    end;
data s2;
set s1;
where y and y2 is not missing;
data a;
merge a m2 s2;
by x;
run;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2007-10-18 15:01:00
这个简单些,
data a;
input no x;
cards;
1    3767.11
2    4683.89
3    3111.59
4    1111.03
5    4030.38
6    3791.35
7    5361.34
8    1380.84
9    7691.02
10    2079.44
11    3890.88
12    623.45
13    5287.07
14    653
15    4426.4
16    11651.7
17    1569.17
18    4751.24
19    1850.73
20    3267.78
;
data b;
set a;
x1=lag1(x);
m=mean(x,x1);
data b;
set b;
where x1 is not missing;
data c;
set a;
x1=lag1(x);
x2=lag2(x);
if x1<x2 then do;
   if x<x1 then do;
      s=1;output;
      end;
    else do;s=0;output;end;
   end;
  else do;
   if x>x1 then do;
      s=1;output;end;
     else do;
      s=0;output;end;
    end; 
data c;
set c;
where x2 is not missing;
data test;
merge a b(drop=x1) c(drop=x1 x2);
by no;
run;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2007-10-18 15:06:00

虽然繁琐点,但可以实现,谢谢了。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2007-10-18 18:34:00

huifu

赫赫,大家考虑复杂了,8句话就能解决。

data a;
input no cost;
cards;
1 3767.11
2 4683.89
3 3111.59
4 1111.03
5 4030.38
6 3791.35
7 5361.34
8 1380.84
9 7691.02
10 2079.44
11 3890.88
12 623.45
13 5287.07
14 653
15 4426.4
16 11651.7
17 1569.17
18 4751.24
19 1850.73
20 3267.78
;
run;
data b;
set a;
lagcost=lag(cost);
m=(cost+lagcost)/2;
lagcost2=lag2(cost);
if cost>lagcost>lagcost2 then  r=0;
else if cost<lagcost<lagcost2 then r=0;
else r=1;
if lagcost=. or lagcost2=. then r=.;
drop lagcost lagcost2;
run;

[此贴子已经被作者于2007-10-18 18:35:04编辑过]

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2007-10-19 09:33:00

阿,高手阿,这个lag函数,我从来都没用过啊,都不知道。非常感谢~~!

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群