2

我有一个简单的SAS 数据集,我将其绘制为散点图,我的两个问题是:

  1. 我正在尝试调整 y 轴而不排除 (0.02,51) 数据点,但我需要 y 轴仅显示 60 到 160 到 20。当我定义它时,它排除了该特定数据点,我不知道如何解决它。
  2. 我无法弄清楚如何添加自定义拟合曲线并显示公式。这是我的线:Y=(160.3*x)/(0.0477+x)

这是我的代码:

proc sgplot data=work.sas1;
title 'Puromycin Uptake Experiments';
scatter x=x y=y/ markerattrs=(color=black);
xaxis Label='Reactant Concentration X (mg/l)';
yaxis Label='Reaction Velocity Y (mg/s)' values=(60 to 160 by 20);
run;

有人可以帮忙吗?

4

2 回答 2

2

尝试使用OFFSETMIN=将 yaxis 扩展到您的值之外。

添加一个新变量,y_hat其中包含公式的值。绘制它并适当地标记它。

data sas1;
x=.02; y=67; output;
x=.02; y=51; output;
x=.06; y=84; output;
x=.06; y=86; output;
x=.11; y=98; output;
x=.11; y=115; output;
x=.22; y=131; output;
x=.22; y=124; output;
x=.56; y=144; output;
x=.56; y=158; output;
x=1.1; y=160; output;
run;

data sas1;
set sas1;
Y_hat=(160.3*x)/(0.0477+x);
run;

proc sgplot data=work.sas1;
title 'Puromycin Uptake Experiments';
scatter x=x y=y/ markerattrs=(color=black);
series x=x y=y_hat / curvelabel="Y=(160.3*x)/(0.0477+x)";
xaxis Label='Reactant Concentration X (mg/l)';
yaxis Label='Reaction Velocity Y (mg/s)' offsetmin=.1 values=(60 to 160 by 20);
run;

产生: 在此处输入图像描述

于 2017-12-11T14:32:37.220 回答
1

y轴

有几个 y 轴选项会影响轴渲染。考虑offsetmin或调整列表values=

公式行

中没有formula语句,SGPLOT因此您必须创建一个辅助列以在series. 有时您可以将数据的 x 与公式的 x 对齐。但是,对于需要更高密度的 x 公式的情况,您可以堆叠散点图和公式数据。 不要沉迷于大量缺失的价值观和任何浪费的感觉。

我不确定您的曲线拟合来自何处,但统计图形(SGPLOT 中的 SG)具有许多用于拟合内置数据的功能。

* make some example data that looks something like the fit curve;
data have;
  do x = 0.03 to 1 by 0.0125;
    y = ( 160.3 * x ) / ( 0.0477 + x ) ;
    y + round ( 4 * ranuni(123) - 8, 0.0001);
    output; 
    x = x * ( 1 + ranuni(123) );
  end;

  x = 0.02;
  y = 51;
  output;
run;

* generate the series data for drawing the fit curve;
* for complicated formula you may want to adjust step during iteration;
data fit;
  step = 0.001;
  do x = 0 to 1;
    y = ( 160.3 * x ) / ( 0.0477 + x ) ;
    output;
    * step = step + smartly-adjusted-x-increment;
    x + step;
  end;
  keep x y;
  rename x=xfit y=yfit;
run;

* stack the scatter data and the curve fit data;
data have_stack_fit;
  set have fit;
run;

proc sgplot data=have_stack_fit;
  scatter x = x y = y;
  series  x = xfit y = yfit / legendlabel="( 160.3 * x ) / ( 0.0477 + x )";

  yaxis values = (0 60 to 160 by 20) ;
run;
于 2017-12-11T16:16:15.083 回答