08-SAS 运算符与常用函数示例

作者

Simon Zhou

发布于

2025年5月29日

修改于

2025年6月7日

代码
%load_ext saspy.sas_magic

1 正态分布随机数的产生

利用 rannor(seed) 函数生成两组各15个来自于均数为 170、方差为 30 的正态分布的随机数。

代码
%%SAS
/*程序3-1*/
/*利用rannor(seed)函数生成两组各15个来自于均数为170、方差为30的正态分布的随机数*/

data prg3_1;
    do seed = 1 to 15;
    x = 170 + sqrt(30)*rannor(seed);
    y = 170 + sqrt(30)*rannor(seed);
    output;
    end;
run;
proc print;
    title '程序3-1';
run;
Using SAS Config named: winlocal
SAS Connection established. Subprocess id is 17612
SAS 输出

程序3-1

观测 seed x y
1 1 179.885 169.562
2 2 172.172 164.066
3 3 182.260 166.581
4 4 172.813 169.526
5 5 166.746 170.175
6 6 165.959 168.630
7 7 173.752 165.595
8 8 165.923 165.643
9 9 171.866 168.354
10 10 162.607 172.370
11 11 177.152 177.806
12 12 167.723 178.842
13 13 164.207 164.806
14 14 175.223 172.147
15 15 169.583 176.685

程序说明:

  • 创建 数据集 prg3_1,包含变量 xy
  • 利用函数 SORT(x)RANNOR(seed) 产生两个随机变量 xy ,均来自均数为 170,方差为 30 的正态分布。

2 单一总体均数的置信区间的估计

从某市随机抽取 10 例 18 岁男生,测得他们的身高的均数为 166.95cm,标准差为 3.64cm,试求其总体均数的 95% 置信区间:

代码
%%SAS
/*程序3-2*/
/*10例18岁的男生,身高均数为166.95cm,标准差为3.64cm,试求其总体均数的95%置信区间*/
data prg3_2;
    n = 10;
    mean = 166.95;
    std = 3.64;
    t = tinv(0.975,n-1);
    /*95%的置信区间,双侧,右侧的界值为97.5%*/
    in = t*std/sqrt(n);
    lclm = mean-in;
    uclm = mean+in;
run;
proc print;
    var lclm uclm;
run;
SAS 输出

程序3-1

观测 lclm uclm
1 164.346 169.554

程序说明:

  • 创建数据集 prg3_2;
  • 变量 nmeanstd 分别代表样本的例数、均数和标准差;
  • tinv(0.975,n-1) 表示自由度为 n-1 时双侧 0.05 水平的 t 界值;
  • in 的值等于 t 界值乘以标准误, lclm 为置信区间的下限, uclm 为置信区间的上限;
  • 最后调用 print 过程将双侧 95% 置信区间的上限和下限输出到输出到窗口。

3 两总体均数之差的置信区间估计

为了解氨甲蝶呤( MTX)对外周血白细胞介素 -2(IL-2) 水平的影响,某医生将 61 例哮喘患 者随机分为两组。其中对照组 29 例,采用安慰剂治疗;试验组 32 例,采用小剂量 MTX 进行治疗。 测得对照组治疗前 IL-2 的平均数为 20.10IU/ml.标准差为 7.02IU/ml; 试验组治疗前 IL-2 的平均数 为 16.89IU/ml,标准差为 8.46IU/ml。问两组治疗前基线的 IL-2 总体均数相差有多大?

代码
%%SAS
/*程序3-3*/
/*61名患者随机分为两组,对照组29,实验组32
对照组治疗前均数为20.10,标准差为7.02
试验组治疗前均数为16.89,标准差为8.46
问两组治疗前基线的总体均数相差有多大*/
data prg3_3;
    n1 = 29;
    n2 = 32;
    m1 = 20.10;
    m2 = 16.89;
    s1 = 7.02;
    s2 = 8.46;
    sc2 = (s1**2*(n1-1)+s2**2*(n2-1))/(n1+n2-2);
    st = sqrt(sc2*(1/n1+1/n2));
    t = tinv(0.975,n1+n2-2);
    in = t*st;
    lclm = abs(m1-m2)-in;
    uclm = abs(m1-m2)+in;
proc print;
    var lclm uclm;
run;
SAS 输出

程序3-1

观测 lclm uclm
1 -0.79660 7.21660

程序说明:

  • 创建数据集 prg3_3;
  • 变量 n1n2 分别表示两组数据的例数,m1m2 分别表示两组数据的均数, s1s2 分别表示两组数据的标准差, sc2 为合并方差, st 为两均数相差的标准误
  • t 为双侧 0.05 的界值;
  • in 为 t 界值和标准误的乘积;
  • lclmuclm 分别是两均数相差 95% 置信区间的下限和上限;
  • 再调用print 过程将置信区间的结果输出到输出窗口。