楼主: tj0412ymy
5378 12

[程序分享] 请教高手如何用SAS对曲线作光滑处理? [推广有奖]

  • 2关注
  • 48粉丝

已卖:4314份资源

副教授

65%

还不是VIP/贵宾

-

威望
0
论坛币
11512 个
通用积分
12.7575
学术水平
72 点
热心指数
91 点
信用等级
64 点
经验
29292 点
帖子
545
精华
0
在线时间
1203 小时
注册时间
2009-3-10
最后登录
2024-2-15

楼主
tj0412ymy 发表于 2010-8-3 17:12:11 |AI写论文
10论坛币
问题:附件中X和Y的关系如图所示,曲线既有波峰,也有波谷。现要求曲线呈单调曲线或单峰曲线,不希望有双峰出现,同时光滑之后,要保证曲线的整体走向(比如上升或下降)。请教高手,此问题如何用SAS编程处理?多谢!

最佳答案

sxlion 查看完整内容

DATA ONE; INPUT X Y; CARDS; 10 20 20 30 25 30 50 40 55 70 70 60 70 50 80 40 90 40 92 39 ; PROC IML; USE ONE; READ ALL INTO MAT; SMVAL=45; Z=MAT(|,1|); S=(Z-Z(|+|)/NROW(Z))(|##|); SM=S##1.5 / (10##(9-(SMVAL*.1))); CALL SPLINEC(FITTED,C,ENDVAL,MAT,SM,,200); CREATE TWO VAR {NEWX NEWY }; APPEND FROM FITTED; DATA THREE; MERGE ONE TWO; ...
关键词:请教高手 如何用 SAS编程 如图所示 请教 高手 SAS 曲线

回帖推荐

jingju11 发表于8楼  查看完整内容

IML总令人望而生畏。一点说明:产生的光滑曲线取决于你所使用的方法

sxlion 发表于7楼  查看完整内容

DATA ONE; INPUT X Y; CARDS; 10 20 20 30 25 30 50 40 55 70 70 60 70 50 80 40 90 40 92 39 ; PROC IML; USE ONE; READ ALL INTO MAT; SMVAL=45; Z=MAT(|,1|); S=(Z-Z(|+|)/NROW(Z))(|##|); SM=S##1.5 / (10##(9-(SMVAL*.1))); CALL SPLINEC(FITTED,C,ENDVAL,MAT,SM,,200); CREATE TWO VAR {NEWX NEWY }; APPEND FROM FITTED; DATA THREE; MERGE ONE TWO; ...

沙发
sxlion 发表于 2010-8-3 17:12:12
DATA ONE;
  INPUT X Y;
CARDS;
10 20
20 30
25 30
50 40
55 70
70 60
70 50
80 40
90 40
92 39
;
PROC IML;
  USE ONE;
  READ ALL INTO MAT;
  SMVAL=45;   
  Z=MAT(|,1|);
  S=(Z-Z(|+|)/NROW(Z))(|##|);
  SM=S##1.5 / (10##(9-(SMVAL*.1)));
   CALL SPLINEC(FITTED,C,ENDVAL,MAT,SM,,200);
  CREATE TWO VAR {NEWX NEWY };
  APPEND FROM FITTED;

DATA THREE;
  MERGE ONE TWO;
TITLE "SM45 AND SPLINE FROM IML OVERLAID";
PROC GPLOT;
   PLOT Y*X NEWY*NEWX/OVERLAY;
      SYMBOL1 I=SM45 C=BLUE V=NONE;
      SYMBOL2 I=JOIN C=RED V=NONE;
RUN;

NEWX and NEWY are  what you want.
Try in 9.1!
Bingo in sas 9.2.

藤椅
jingju11 发表于 2010-8-3 23:17:17
  1. proc sgplot;
  2. loess x = x y = y/degree = 1 interpolation = cubic smooth = 0.75 lineattrs = (color = blue);
  3. run;
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
hopewell + 1 + 1 + 1 我很赞同

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

板凳
nkwilling 发表于 2010-8-4 08:47:43
Jingju11玩9.2版本的很熟啊^_^.

报纸
tj0412ymy 发表于 2010-8-4 20:15:01
2# jingju11
过程 proc sgplot在SAS9.1.3中没有啊,请教高手给个能在9.1.3版本下处理的程序?多谢!

地板
sxlion 发表于 2010-8-5 12:53:46
symbol    i=SM25p  color=blue    ;
proc gplot;
  plot  y*x;
  run;
  quit;

注:SM表示平滑,SM加数字0到99,需调整。效果和jingju给的SAS9.2的sgplot一样。

7
tj0412ymy 发表于 2010-8-6 17:43:44
5# sxlion
高手给出的这种方法,比较好。但是我想从平滑后的曲线中提取出平滑后的数据,又该如何做呢?谢谢!

8
jingju11 发表于 2010-8-7 02:14:31
tj0412ymy 发表于 2010-8-4 20:15
2# jingju11
过程 proc sgplot在SAS9.1.3中没有啊,请教高手给个能在9.1.3版本下处理的程序?多谢!

  1. proc loess data=had;
  2.       ods output OutputStatistics = HadFit(keep = x depVar Pred rename = (depVar = y Pred = smoothedY));
  3.       model y = x / degree=2 direct smooth = 1;
  4.    run;
  5.    symbol1 color=black value=dot ;
  6.    symbol2 color=blue interpol=spline w = 2 value=none;  
  7.    proc gplot data=HadFit;
  8.       plot (y SmoothedY) *x/overlay;
  9.    run; quit;
复制代码

IML总令人望而生畏。一点说明:产生的光滑曲线取决于你所使用的方法

9
sxlion 发表于 2010-8-7 09:19:50
graph里面的sm(可控)和spline选项用来光滑曲线都是基于样条插值的。

其实BASE里面也有个函数可以做到,不过是需要9.2的,楼主没有,只好作罢。

10
tj0412ymy 发表于 2010-8-10 13:58:35
sxlion 发表于 2010-8-7 00:03
DATA ONE;
  INPUT X Y;
CARDS;
10 20
20 30
25 30
50 40
55 70
70 60
70 50
80 40
90 40
92 39
;
PROC IML;
  USE ONE;
  READ ALL INTO MAT;
  SMVAL=45;   
  Z=MAT(|,1|);
  S=(Z-Z(|+|)/NROW(Z))(|##|);
  SM=S##1.5 / (10##(9-(SMVAL*.1)));
   CALL SPLINEC(FITTED,C,ENDVAL,MAT,SM,,200);
  CREATE TWO VAR {NEWX NEWY };
  APPEND FROM FITTED;

DATA THREE;
  MERGE ONE TWO;
TITLE "SM45 AND SPLINE FROM IML OVERLAID";
PROC GPLOT;
   PLOT Y*X NEWY*NEWX/OVERLAY;
      SYMBOL1 I=SM45 C=BLUE V=NONE;
      SYMBOL2 I=JOIN C=RED V=NONE;
RUN;

NEWX and NEWY are  what you want.
Try in 9.1!
Bingo in sas 9.2.
请教高手,要保证平滑后的数据为非负数,不能出现负数!谢谢!

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

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