首页 > 其他分享 >SAS 知识点

SAS 知识点

时间:2025-01-05 13:33:48浏览次数:3  
标签:知识点 run 变量 data PROC SAS proc

SAS 

SAS 是一个软件套件(software suite) 可以挖掘 更改 管理和检索各种来源的数据,对其进行数据分析

SAS Programming process:

Access Data -> Explore ->Prepare->Analyze and report on data -> Exp

SAS Programming Interface (编程接口):

SAS Studio SAS Enterprise Guide SAS windowing environment

Editor Log Results and Output Data

permanent 永久库:存在于永久库中的数据集是永久存在的(只要你不去删除它)

temporary 临时库:临时库中的数据集则在你退出SAS后自动被删除

具有两个步骤:

Data : read process and create data

Proc : report manage and analysis data

命名库:

长度可为1至8个字符 ​ 必须以字母(A-Z,大写或小写)或下划线0开头 ​ 可以用数字、字母或下划线的任意组合继续。

SAS 语法结构:

  •  请注意每行如何以分号 ( ; )
  • 事实上,SAS 并不关心行,但它确实要求您在每个命令的末尾放置一个分号。否则,它无法分辨一个命令在哪里结束,下一个命令在哪里开始。
  • 每当您发现您的程序不工作时,特别是如果 SAS 似乎不知道您在说什么,首先要寻找的是缺少的分号。
Global Statement 全局声明:

TITlLE ...;

OPTIONS ...;

LIBINAME....;

(GLOBAL STATEMENT 不需要run语句)

在 SAS 中创建自己的数据的规则:
Delimiter = ‘ , ’ (分隔符):

dsd = Delimiter-Sensitive Data (dsd = 分隔符敏感数据):

$ :指定将变量值存储为字符值,而不是数值

@ :保存 DATA 的同一迭代中执行下一个 INPUT 语句的输入记录

@@ :保存跨 DATA 步骤迭代执行下一个 INPUT 语句的输入记录

$13. 13个字符的长度

$ 默认字符长度为 8

#:与相应的行匹配

/ (斜杠符号) :将指针前进到下一条输入记录的第 1 列

if ... then ..

if 放在input前,输出所有

if 放在input后,会符合if条件,再做输出

Rename, Drop, Keep a Variable(重命名、删除、保留变量):
keep / drop:

Rename / Drop:

note:

  • 创建任何的库都必须分配给共享文件夹
  • 创建库名称时要记住的准则 限制为8个字符 必须以字母或下划线开头,只能包含字母 数字 或 下划线 , 不允许使用空格。

SAS Program Syntax

Global Statement 全局声明

  1. 您可以在 SAS 程序中任意位置指定的语句

  2. 为任何一个过程生成所有输出设置值和属性

  3. 但是,它们确实适用于程序中此后生成的所有输出,除非它们被 procedure 选项或其他 global 语句覆盖。

PRINT 过程 (proc print)

MEANS Procedure (proc means)

Character Functions 字符函数

返回字符串长度

Cat: ➢ 不删除前导或尾随空格,并返回 "串联" 的字符串

IF-Else 条件语句:

Filtering Data:

Where 筛选文本数据

IT

gt:

ne:

Eq:

SAS中的函数:

SUBSTR函数:

1.从参数中提取子字符串

2.语法:SUBSTR(string, position <length>)

string:指定字符常量、变量或表达式

position:指定作为起始字符位置的数值常量、变量或表达式

length (可选参数):指定一个数值常量、变量或表达式,该表达式是要提取的子字符串的长度。

TRIM函数:

1.从字符表达式中删除尾随空格,如果缺少表达式,则返回长度为 0 的字符串

2.复制字符参数,删除尾随空格,并返回 trimmed 参数作为结果

3.如果参数为空,则 TRIM 返回长度为零的字符串 ➢ 连接后有用,因为连接不会删除尾随空格

EG:

LEFT函数:

1.➢通过删除前导空格来左对齐字符串,前导空格移动到值末尾。**

2.➢在 DATA 步骤中,如果 LEFT 函数向以前未分配长度的变量返回值,则为该变量提供参数的长度。

3.➢ LEFT 返回一个参数,其中前导空格移动到值末尾。参数的长度不会改变。

EG:

RIGHT 函数:

1.右对齐字符表达式

2.在 DATA 步骤中,如果 RIGHT 函数向以前未分配长度的变量返回值,则为该变量提供第一个参数的长度。

3.RIGHT 函数返回一个参数,其中尾随空格移动到值的开头。结果的长度与参数的长度相同。

EG:

STRIP 函数:

以下列表将 STRIP 函数与 TRIM 和 TRIMN 函数进行了比较:

eg:

COMPRESS 函数:

1.返回一个字符串,其中指定了字符从原始字符串中删除。

删除字符所有空格使用compress

忽略要删除的字符的大小写 使用compress

删除所有字母字符 使用compress

删除所有数字 使用compress

SAS Formats: 控制数据输入

用于 data step 和 proc step

1.定义变量的格式是告诉 SAS 显示变量中的值的方式(例如,您将如何看到它)。

2.格式可以分为与 informat 相同的三个类(字符、数字和日期时间),并且始终包含一个点 (.)

3.变量的格式不必与变量的 ininformation 相同。当您在数据步骤中读取数据或创建新变量时声明了 informat,但 format 语句可用于数据步骤或 proc 步骤。

EG:

informat:控制数据输出形式

只用于 proc step 格式主要分为三类: ➢ 字符 ➢ 数字 ➢ 日期

EG:

Informats vs Formats

WORDDATE:

SSN:

1.如果缺少该值,SAS 将写入 9 个单句点,并在 3 和 4 句点之间以及 5 和 6 个句点之间使用连字符。

2.如果值包含的位数少于 9 位,则 SAS 右对齐该值,并在左侧用零填充该值。如果值超过 9 位,SAS 会将其作为缺失值写入。

SSN Format Example

PUT Function

1.使用指定格式返回值

2.语法:PUT(source, format.)

source:标识要重新格式化其值的常量、变量或表达式。源可以是字符或数字。

❖ format.:包含要应用于源中指定的值的 SAS 格式。

3.

putEG:

PUT 函数与 FORMAT 函数

1.PUT 函数将数值变量永久转换为字符变量,并为其提供关联的格式。

2.format 语句只会使读取器使用新格式,而不会更改变量的基础类型。

3.因此,格式化特定变量的两种方法对于以我们希望的方式表示变量并使其更有意义非常有用,因此大小格式非常有用。

PUT 函数与 PUT 语句

1.PUT 函数使用指定格式返回值。您必须使用 assignment 语句将值存储在变量中。

2.PUT 语句将值写入外部目标(SAS 日志或您指定的目标)。

PROC FORMAT:

Self-defined format自定义格式

PROGRAM DATA VECTOR (PDV)

Implicit Output 隐性输出:

Explicit output 显性输出:

IMPLICIT OUTPUT vs EXPLICIT OUTPUT

SAS LOOPS Function 循环:

DO LOOPS FUNCTION

在SAS中,DO循环(也称为DO语句)用于重复执行一段代码多次,可以提高代码的效率,尤其是在需要重复执行相同操作时。DO循环可以用来处理诸如数据处理、计算和批量操作等任务。

DO循环的基本语法

DO循环的基本语法如下:

DO index-variable = start-value TO end-value <BY increment>;
   /* 循环体:需要重复执行的代码 */
END;
  • index-variable: 循环变量,会随着每次循环而变化。
  • start-value: 循环变量的起始值。
  • end-value: 循环变量的结束值。
  • BY increment: (可选)循环变量的增量,默认为1。

DO循环示例 1: 简单的DO循环

这个示例中,循环变量i从1到5,依次输出每次循环的i值:

DATA example;
   DO i = 1 TO 5;
      PUT i=;       /* 输出i的值 */
   END;
RUN;

该循环输出:

i=1
i=2
i=3
i=4
i=5

DO循环示例 2: 带增量的DO循环

你可以使用BY语句指定循环变量的增量。下面的示例将i从1到10,以步长2递增:

DATA example;
   DO i = 1 TO 10 BY 2;
      PUT i=; /* 输出i的值 */
   END;
RUN;

该循环输出:

i=1
i=3
i=5
i=7
i=9

DO循环示例 3: 使用DO循环处理数据集

你还可以使用DO循环遍历数据集中的每一行。例如,假设你有一个数据集class,你想对每一行数据执行相同的操作。

DATA example;
   SET sashelp.class;
   DO i = 1 TO 3;
      BMI = weight / (height * height); /* 计算BMI */
      PUT 'Iteration ' i= BMI=; /* 输出当前BMI */
   END;
RUN;

这将为sashelp.class数据集中的每一行计算并输出BMI三次。

DO WHILE循环

DO WHILE循环在条件成立时会一直执行。与普通的DO循环不同,DO WHILE循环的条件是在每次循环之前检查的。如果条件为真,循环继续执行。

DATA example;
   i = 1;
   DO WHILE (i <= 5);
      PUT i=; /* 输出i的值 */
      i + 1; /* 增加i的值 */
   END;
RUN;

该循环输出:

i=1
i=2
i=3
i=4
i=5

DO UNTIL循环

DO UNTIL循环在每次执行之后检查条件。如果条件为真,循环结束。如果条件一直不成立,循环将继续执行。DO WHILE循环不同,DO UNTIL循环会先执行循环体,再检查条件

DATA example;
   i = 1;
   DO UNTIL (i > 5);
      PUT i=; /* 输出i的值 */
      i + 1; /* 增加i的值 */
   END;
RUN;

DO循环嵌套

循环语句:

你可以在一个DO循环内部嵌套另一个DO循环。例如,打印一个乘法表:

DATA example;
   DO i = 1 TO 5; /* 外层循环 */
      DO j = 1 TO 5; /* 内层循环 */
         product = i * j;
         PUT i= j= product=; /* 输出乘积 */
      END;
   END;
RUN;

该循环会打印一个5×5的乘法表。

 process:                                                                 

     results:   

DO循环与数组结合使用

DO循环通常与数组结合使用,尤其是当你需要对数组中的多个元素进行操作时。例如,计算数组元素的和:

DATA example;
   ARRAY nums[5] (1 2 3 4 5); /* 定义数组 */
   sum = 0;
   DO i = 1 TO 5;
      sum + nums[i];         /* 将数组元素加到sum中 */
   END;
   PUT sum=;                 /* 输出sum的值 */
RUN;

RESULT:

总结

SAS中的DO循环有很多应用,以下是几种常见类型:

  1. 普通DO循环:用于重复执行一段代码,按指定次数进行迭代。

    • 语法:DO i = 1 TO 5;
  2. DO WHILE循环:只要条件为真,就会重复执行。条件在循环开始前检查

    • 语法:DO WHILE (condition);
  3. DO UNTIL循环:直到条件为真时,循环才会停止。条件在循环体执行后检查

    • 语法:DO UNTIL (condition);
  4. 嵌套DO循环:一个DO循环可以嵌套在另一个DO循环中,用于处理复杂的任务。

    • 示例:用于打印乘法表。
  5. DO循环与数组结合:DO循环可以与数组一起使用,用于批量处理数组中的元素。

    • 示例:计算数组元素的总和。

可视化 & 结构化数据

Visualizing Data:

charts 图表

plots 情节

proc print 过程打印

proc report 报告

statistical procs 统计过程

output delivery system 输出交付系统

Proc CHART Statement

PROC CHART 是 SAS 中用于生成图形的一个过程,它能够绘制各种类型的图表,包括条形图、饼图、点图等。PROC CHART 主要用于显示分类数据(如频率分布)和提供视觉化展示。

基本语法

PROC CHART DATA=<数据集>;
   VBAR <变量名> / <选项>;
   HBAR <变量名> / <选项>;
   PIE <变量名> / <选项>;
RUN;
  • DATA=<数据集>:指定要使用的数据集。
  • VBAR <变量名>:生成竖向条形图。
  • HBAR <变量名>:生成横向条形图。
  • PIE <变量名>:生成饼图。

常用图表类型

  1. 竖向条形图(Vertical Bar Chart)

    使用 VBAR 语句绘制竖向条形图,用于显示各类别的频数或其他统计量。

PROC CHART DATA=sashelp.class;
   VBAR sex;
RUN;

   2.横向条形图(Horizontal Bar Chart)

使用 HBAR 语句绘制横向条形图,功能与竖向条形图相似,只是条形图的方向发生了变化。

PROC CHART DATA=sashelp.class;
   HBAR sex;
RUN;

3.饼图(Pie Chart)

使用 PIE 语句绘制饼图,通常用于显示各个分类项在总量中的占比

PROC CHART DATA=sashelp.class;
   PIE sex;
RUN;

Distrete 离散

用于在单独的条形图中显示每个数据值

以课程course 和 age 为例子:

常见选项

PROC CHART 中,您可以使用不同的选项来定制图表的外观和行为。

  1. FREQ=:指定要绘制的分类变量的频数。例如,FREQ=var 用来指定某个变量的频数。

  2. GROUP=:指定分组变量,以便在同一图表中绘制多个分组的条形或饼图。

  3. TYPE=:控制图表的类型,常见的有 FREQSUM 等,用于指定如何汇总数据。

  4. PERCENT=:指定在图表中显示百分比。

  5. AXIS=:控制坐标轴的属性(如字体、颜色等)

Example:
data class;
input name $ gender $ age weight courseno major $;
cards;
John M 48 128.6 101 STAT
Peter M 58 158.3 101 HIST
Lie F 45 115.5 201 STAT
Joe M 28 170.1 301 ENGG
Milk M 34 170.1 202 HIST
Pat F 23 170.1 302 STAT
Jil F 45 170.1 101 HIST
tOM m 56 170.1 301 ENGG
;
run;

proc chart data=class;
hbar gender;  /*product a horizontal bar chart 制作水平条形图*/

vbar courseno/discrete  /*var指绘制垂直条形图的变量是courseno(课程号),并且/discrete选项表明courseno被视为离散变量,即每个不同的课程号都会有一个条形*/ 
	group=major        /*指定了条形图的主要分组依据是major(专业),即每个专业会有一组条形,这些条形代表了该专业下的不同课程号。*/
	SUBGROUP= gender   /*指定了次要分组依据是gender(性别),即在每个专业的条形组内,会进一步根据性别细分。每个课程号的条形会被分割成两部分,分别代表男性和女性*/
	sumvar=age         /*指定了用于计算条形高度的变量和计算类型。*/
	type=mean;         /*说明不是直接对年龄求和,而是计算每个分组(这里是指每个课程号在每个专业和性别下的组合)的平均年龄*/
run;

Proc plot :

PROC PLOT 是 SAS 中用于绘制二维散点图(scatter plot)的过程。它帮助你可视化数据之间的关系,尤其适用于展示变量之间的相关性。你可以通过 PROC PLOT 绘制散点图,并通过不同的选项来定制图形。

语法
PROC PLOT <options>;
   PLOT <y-variable>*<x-variable> <options>;
RUN;
  • <options>:是可选的,用来定制图形的显示方式。
  • PLOT:指定你要绘制的散点图。
    • y-variable:要绘制在 Y 轴上的变量。
    • x-variable:要绘制在 X 轴上的变量。

常见选项

  1. VREFHREF

    • VREF:垂直参考线,表示 X 轴位置上的垂直参考线。
    • HREF:水平参考线,表示 Y 轴位置上的水平参考线。
PROC PLOT DATA=sashelp.class;
   PLOT height*weight / VREF=150 HREF=60;
RUN;

or 指定点的标记符号,如圆点(O)、星号(*)、加号(+)等。默认是圆点

PROC PLOT DATA=sashelp.class;
   PLOT height*weight ='*';
RUN;

Proc sgscatter 也用于创建散点图

proc sgscatter data= sashelp.cars;
	title 'option 1';
/*horsepower*length 表示在散点图中将车长(x 轴)与马力(y 轴)进行绘制。*/
/*/ group=model 表示根据车型进行分组*/
	plot horsepower * length / group=model;
run;


/*option 2 */
proc sgplot data=sashelp.cars;
	title 'option 2';
	scatter  x=horsepower y=length / group=model;
run;

两者结果一致:

EG1:
proc sgscatter data = sashelp.cars;
	title 'cars';
	plot weight * length / group=origin;
run;

/*Scatter plot with Prediction Ellipse 散点图的椭圆预测*/
proc sgplot data=sashelp.iris;          /*这是一个包含鸢尾花特征的数据集。*/
	title 'Iris Petal Dimension';		
	scatter x=petallength y=petalwidth; /*绘制散点图 x表示花瓣长度 y表示宽度*/
	ellipse x=petallength y=petalwidth; /*在散点图中绘制'椭圆'这个椭圆展示了花瓣长度和宽度的联合分布特征。*/
run;

EG2:
proc sgplot data=sashelp.cars;
 	title 'cars';
	scatter x = weight y=length ;
	ellipse x = weight y=length ;
run;


data cars1;
set sashelp.cars;
run;
proc sgplot data=cars1;
title "cars";
scatter x=weight y=length /group =origin;
ellipse x=weight y=length/group =origin;
run;

PROC SGPLOTPROC PLOT 区别

  • PROC PLOT
    • 只能绘制一个单一图形,且功能扩展有限,无法在一个图形上叠加多层数据。
  • PROC SGPLOT
    • 支持多个图层的叠加,可以在同一图形中绘制多个数据集、多个图形类型。例如,绘制散点图并加上拟合线:
可自定义性
  • PROC PLOT
    • 相对简单,支持的自定义选项有限。无法灵活调整图形的各个方面(如图例、颜色、标签等)。
  • PROC SGPLOT
    • 自定义功能非常强大,支持多种颜色、符号、样式以及图形属性的设置,可以对图形的每个部分进行精细化控制。
总结:

Proc Freq :

生成 “单项” 到 “多项 (n向)的频率和偶然性(交叉稳定)表

two-way tables (双向表) 计算关联的测试和度量

N-way 通过计算层内和跨层的统计量进行分层分析

one-way 提供等比例或指定空比例的拟合优度检验

for one-way proc freq 还提供置信区间(confidence interva)和二项式比例测试(binomial proportions) 包含非劣效性(non-inferiority)和等效性测试(equivalence)。

contingency tables:

proc freq 可以计算各种统计量 去检查两个分类变量之间的关系

要确认是否存在关联,proc freq 可以计算 chi-square tests (卡方检验)

要估计关联的强度,proc freq 会计算关联的度量:

-当关联不存在时,度量值趋近于0‘

-存在关联,度量值趋近于最大值(or最小值)

contingency tables 包含以下内容:

a. chi-sqaure tests

b. measure of association 关联测量

c. 2*2表格的风险(二项式比例) 和 风险差异

d. tests for trend

e. tests and measures of agreement 一致性检测和测量

f. Cochran-Mantel- Haenszel statistic

proc freq data = class;  /*proc freq 用于计算和展示分类变量的频数和分布过程*/
tables gender;          /*生成一个关于gender的频数表*/
run;
note:

Proc Means:

用于提供数据汇总工具,用于计算所有观测值和观测值内变量的描述性统计量,

有以下功能:

-基于时刻的计算 描述性统计量 descriptive statistics

-估计量化值,包括中位数

-计算平均数的置信区间

-识别极值

-执行 t 检验

可以使用 output 语句将统计数据存储到sas 数据集中

Eg:
proc means data = class n min max;
/*n:样本数量  
  min:最小值
  max:最大值*/
var age; /*分析的变量为 age(年龄)。只有这个变量的描述性统计量会被计算。*/
run;

Proc Univariate :

PROC UNIVARIATE 的主要功能:

  1. 描述性统计量

    • 计算数据集中的均值、标准差、偏度、峰度、中位数、最大值、最小值等统计量。
  2. 分布分析

    • 评估数据的分布形态,查看数据是否符合某个理论分布(例如正态分布),并进行拟合。
  3. 图形显示

    • 绘制直方图、箱线图、Q-Q图等,帮助直观地理解数据分布。
  4. 检验

    • 提供正态性检验,如 Shapiro-Wilk 检验、Anderson-Darling 检验等,用于检查数据是否符合正态分布。

-调用UNIVARIATE存储过程需要PROC UNIVARIATE 语句。

-如果不指定任何其他语句,存储过程会生成各种统计量,总结每个分析变量的数据分布情况:

• sample moments

•basic measures of location and variability 位置和变异性的基本度量

• confidence interval for the mean,standard deviation and variance

• tests for location

• tests for nomality

• trimmed and winsorized means 均值的修剪和标准化

• quantiles and related confidence intervals 等值线和置信区间

• robust estimate of scale 规模的可靠估计

• extreme observations and extreme values 极端观测值和极端值

• frequency counts for observations 观测值的频数计数

• missing values 缺失值

语法

PROC UNIVARIATE DATA=dataset <options>;
   VAR variable;
   <other options>;
RUN;
  • DATA=:指定输入数据集。
  • VAR:指定要分析的变量。
  • 其他选项可以用于定制输出,如图形输出、统计量等。

常用选项

  1. PLOT:绘制直方图、箱线图等图形。
  2. NORMAL:进行正态性检验,并绘制正态概率图(Q-Q图)。
  3. EXTREME:显示极值(最大值和最小值)。
  4. NORMTEST:进行正态性检验,并返回正态性检验的结果。

示例

示例 1:基本的描述性统计分析
PROC UNIVARIATE DATA=sashelp.class;
   VAR Height Weight;
RUN;

该代码计算数据集 sashelp.classHeightWeight 两个变量的描述性统计量。

示例 2:绘制直方图和箱线图
PROC UNIVARIATE DATA=sashelp.class PLOT;
   VAR Height;
RUN;
示例 3:正态性检验
PROC UNIVARIATE DATA=sashelp.class NORMAL;
   VAR Height;
RUN;
Example:
/*
在 SASHELP.class 中生成具有法线、中位数、平均值和 SD 的 Height 直方图,并将直方图命名为 Students。
*/

proc univariate data=sashelp.class;
  var height;             /*基本的描述性统计分析*/
  histogram height / normal 
  midpoints=50 to 70 by 2 /* 指定直方图的中点 */
  cfill=bibg ctext=aquamarine;
  inset n = 'number of students ' median='Median' mean='Mean' std='Standard Deviation'; /* 插入统计信息 */
  title  'Students' ;     /* 设置图表标题 */
run;

输出结果的解释:

偏度(Skewness):

偏斜度通常被描述为数据集对称性或不对称的度量。 完全对称的数据集的偏度为 0,正态分布的偏度为 0。

  • 如果输出的偏度大于0,表示数据的分布偏向右侧。
  • 如果输出的偏度小于0,表示数据的分布偏向左侧
  • 如果偏度接近0,表示数据分布较为对称
峰度(Kurtosis) :
  • 如果峰度大于3,表示数据分布比正态分布更尖锐,尾巴较长(Leptokurtic)。
  • 如果峰度小于3,表示数据分布比正态分布更加平坦,尾巴较轻(Platykurtic)。
  • 如果峰度接近3,表示数据分布与正态分布相似,尾巴适中(Mesokurtic)。

Negative Kurtosis

Positive Kurtosis

  • 偏度 主要衡量数据分布的对称性(右偏或左偏)。
  • 峰度 主要衡量数据分布的尖峰程度(尾巴的厚重程度)
  • 理解偏度和峰度有助于更好地分析数据的分布特征,并对进一步的统计分析(如回归分析、假设检验等

K-S检验的输出和如何解读:

假设我们进行正态性检验,即检验样本数据是否来自于正态分布。输出结果通常会包括以下几部分:

  1. D统计量:K-S检验的统计量 DDD 表示经验分布函数和理论分布函数之间的最大差距。这个值越大,表示样本数据与理论分布的差异越大。

  2. p值:p值用于判断零假设是否可以拒绝。通常使用显著性水平(例如 0.05)来判断:

    • 如果 p值 < 显著性水平(通常为0.05),则拒绝零假设,说明样本数据显著地偏离了理论分布,数据不符合该理论分布。
    • 如果 p值 ≥ 显著性水平,则不能拒绝零假设,说明样本数据符合理论分布。

Cramér-von Mises检验Anderson-Darling检验

是常用于检验样本数据是否符合某一理论分布的两种统计方法。这两种检验都属于非参数检验,尤其用于分布的拟合度检验,特别是正态性检验。

这两种检验方法与 Kolmogorov-Smirnov检验(K-S检验)类似,都通过比较样本数据的经验分布函数(EDF)和理论分布的累积分布函数(CDF)之间的差异来进行假设检验。不过,它们的具体统计量计算方式和敏感度有所不同。

1. Cramér-von Mises检验

Cramér-von Mises检验是一个用于检验样本是否符合某一分布的统计方法,特别适用于正态性检验。

Cramér-von Mises检验的原理:

该检验统计量衡量的是样本的经验分布函数(EDF)与理论分布的累积分布函数(CDF)之间的平方差异。具体来说,它是基于所有观测值的差异平方的平均值,公式为:

Cramér-von Mises检验的假设:
  • 零假设(H0):样本数据来自于理论分布。
  • 备择假设(H1):样本数据不来自于理论分布。
如何解读Cramér-von Mises检验结果:
  • W²值:该值越大,表示样本数据与理论分布之间的差异越大。
  • p值:p值用于决定是否拒绝零假设。如果p值小于显著性水平(如0.05),则可以拒绝零假设,表示样本数据与理论分布之间存在显著差异,即数据不符合该理论分布。

2. Anderson-Darling检验

Anderson-Darling检验是Cramér-von Mises检验的改进版本,它在计算统计量时赋予尾部(分布的极端部分)更多的权重,从而使检验更加敏感于尾部的偏离

Anderson-Darling检验的原理:

Anderson-Darling检验的统计量与Cramér-von Mises检验相似,都是度量样本的经验分布与理论分布之间的差异。不同之处在于,Anderson-Darling检验使用了加权的平方差,特别强调尾部的差异。其统计量公式为:

Anderson-Darling检验的假设:
  • 零假设(H0):样本数据来自于理论分布。
  • 备择假设(H1):样本数据不来自于理论分布。
如何解读Anderson-Darling检验结果:
  • A²值:A²值越大,表示样本数据与理论分布的差异越大,尤其是在尾部的差异更明显。
  • p值:与Cramér-von Mises检验类似,p值用于判断是否拒绝零假设。p值小于显著性水平(如0.05)时,拒绝零假设,表示样本数据与理论分布之间存在显著差异。

Cramér-von Mises检验与Anderson-Darling检验的比较

  • 敏感性差异:Anderson-Darling检验相比Cramér-von Mises检验更能检测到数据在分布尾部的偏离,因此它对尾部的偏差更加敏感。
  • 计算复杂度:Anderson-Darling检验的计算通常比Cramér-von Mises检验复杂一些。
  • 适用性:两者都可以用来检验样本数据是否符合某个理论分布,常用于正态性检验。

总结:

  • Cramér-von Mises检验Anderson-Darling检验 都是用于检验数据是否符合特定分布的非参数检验。
  • Anderson-Darling检验Cramér-von Mises检验 更敏感于尾部的偏离。
  • Anderson-Darling统计量:检测数据的尾部偏离。
  • Cramér-von Mises统计量:整体偏离程度的度量。
  • p值:用于判断是否拒绝零假设,p值小于显著性水平时,拒绝零假设,表示数据与理论分布显著不同。
  • 这两种检验通常用来进行正态性检验,也可以用于其他分布的拟合度检验。

Output Delivery System (ODS)-Report Formats

Output Delivery System (ODS) 是 SAS 提供的一个强大的输出管理系统,它能够灵活地控制输出的格式、目的地和内容。使用 ODS,用户可以将分析结果输出到不同的格式,比如 HTML、PDF、RTF、Excel 等,甚至还可以将结果发送到外部数据库或日志中。

1. ODS 的基本概念

ODS 允许你:

  • 控制输出的目标:输出可以直接发送到文件、浏览器、打印机或日志等。
  • 选择输出格式:ODS 支持多种输出格式,如 HTML、PDF、RTF、Excel 等,可以选择合适的格式。
  • 定制输出样式:用户可以修改输出的外观,调整字体、颜色、表格样式等。

2. 常见的 ODS 输出格式

ODS 支持多种格式,以下是一些常见的输出格式:

(1) HTML 格式

用于在网页浏览器中查看和展示数据。它可以非常方便地生成交互式的报告,支持图表、表格和其他网页元素。

ods html file='output.html';
(2) PDF 格式

适合生成适用于打印的高质量文档。生成的 PDF 文件保持固定的布局,非常适合报表或文档形式的输出。

语法

ods pdf file='output.pdf';
(3) RTF 格式

用于生成 Microsoft Word 可读的文档。RTF 格式广泛用于生成文档,并允许进一步在 Word 中进行编辑。

  • 语法
ods rtf file='output.rtf';
(4) Excel 格式

ODS 也支持将输出结果保存为 Excel 文件(.xls 或 .xlsx 格式),这对于后续的数据分析或报表生成非常方便。

  • 语法:
ods excel file='output.xlsx';
(5) CSV 格式

输出为逗号分隔值(CSV)文件,适合用于导入其他应用程序如 Excel 或数据库。

  • 语法:
    ods csv file='output.csv';
    

(6) LaTeX 格式

适合用于生成适用于 LaTeX 文档系统的报告,可以生成高质量的数学公式、符号和表格。

语法:

ods latex file='output.tex';

3. ODS 输出的控制

使用 ODS,你可以指定报告输出的多个选项,比如输出的位置、内容以及格式。

(1) 打开 ODS 输出

使用 ODS 语句来启动特定的输出格式。例如,输出 HTML 格式的报告:

ods html file='output.html';
(2) 关闭 ODS 输出

使用 ODS 语句关闭输出。例如,停止输出 HTML 格式:

ods html close;
(3) 指定多个输出目的地

ODS 允许同时输出到多个格式。例如,你可以将报告同时输出为 HTML 和 PDF 格式

ods html file='output.html';
ods pdf file='output.pdf';
(4) 选择报告的内容

ODS 可以选择输出特定的内容。使用 ODS SELECTODS EXCLUDE 来控制报告中展示哪些结果。例如,选择输出特定的表格

ods select summary statistics;

如果你只希望生成一些特定的表格或统计量,可以在报告中通过 ODS SELECT 指定需要的内容。

(5) 设置样式

ODS 还允许你使用样式来控制报告的外观。例如,你可以使用预定义的样式或者自定义样式:

ods html style=statistical;

4. ODS 报告格式的选择与定制

ODS 提供了一些标准的样式和格式,如:

  • STYLE= 用于指定输出的样式(例如,statisticaljournalminimal)。
  • OPTIONS= 允许你为输出报告设置特定选项(例如,分页设置,标题样式等)。
  • TITLE、FOOTNOTE 等 用于设置报告中的标题和脚注。

例如,生成一个带有标题的 HTML 报告,并使用 statistical 样式:

ods html file='output.html' style=statistical;
title "My Statistical Report";
proc print data=sashelp.class;
run;
ods html close;

ODS with Proc Freq

SAS - Frequency Distributions

summary:

proc means 提供基本的描述性统计。

proc univariate 提供更详细的统计分析和可视化。

ods trace on 帮助您追踪和管理输出内容,方便后续分析。

ODS with Proc Means

proc mean

**proc means** 用于计算数据集中变量的基本统计量,如均值、标准差、最小值、最大值

/*proc means 用于计算数据集中变量的基本统计量,如均值、标准差、最小值、最大值等。*/
proc means data=class1;
var age ;
run;

ODS Example:
data class2;
set sashelp.class;
run;
ods trace on ;
proc means data= class2;
var age;
run;
ods trace off ;

/*将 proc means 生成的 Summary 输出直接保存到一个新的数据集 mymeans 中。*/
ods output Means.Summary = mymeans; /*Means.Summary 是输出对象的名称,表示来自 proc means 的汇总统计信息。*/
proc means data=class2;
var age ;
run;
ods output off;/*关闭 ODS 输出重定向功能。*/

SAS - Cross Tabulations 交叉表

•Cross tabulation involves producing cross tables also called contingent tables using all possible combinations of two or more variables. In SAS it is created using PROC FREQ along with the TABLES option. For example - if we need the frequency of each model for each make in each car type category, then we need to use the TABLES option of PROC FREQ.

-交叉表法包括使用两个或多个变量的所有可能组合制作交叉表,也称为或然表。在 SAS 中,使用PROC FREQTABLES选项创建交叉表。例如,如果我们需要每个汽车类型类别中每个品牌的每个车型的频率,那么我们需要使用 PROC FREQ 的 TABLES 选项。

Syntax:

Coding Example:

data class1;
set sashelp.class;
run;

/*第一部分的 proc freq 用于生成 sex 的频率表,并利用 ODS 跟踪记录输出对象的名称。*/
ods trace on;
proc freq data=class1;
tables sex;
run;
ods trace off;

/*第二部分的 proc freq 用于生成多个变量之间的交叉频率表,便于分析变量之间的关系。*/
proc freq data=class1;
table sex*age sex*name age*name sex*age*name / nocol norow nopercent;
 /*生成多个变量之间的交叉频率表:
sex*age:性别和年龄的交叉表。
sex*name:性别和名字的交叉表。
age*name:年龄和名字的交叉表。
sex*age*name:性别、年龄和名字的三维交叉表*/
/*nocol norow nopercent:选项表示在输出中不显示列总和、行总和和百分比,专注于频数的显示。*/
run;

result:

EG2:

Stacking data 堆积数据

  • 堆叠数据就是将多个数据集按行合并,通常在数据预处理时非常有用,特别是当数据来自不同的来源或在不同时间点收集时。
  • SET 语句是一种非常方便的方式来实现数据堆叠,它允许我们将多个数据集按顺序叠加到一起。
data A ;
input name $ gender $ age weight;
cards;
John M 48 128.6
Peter . 58 158.3
Liz F .  115.3
Joe M 28 170.1
;
run;
data B;
input name $ gender $ age weight;
cards;
Mike M 34 150.2
pat F 56 125.0
;
run;
data C;/*A 和 B 合并到新的数据集 C 中。它堆叠来自两个数据集的记录*/
 set A B;    
run;

WORK.A

WORK.B

WORK.C

APPEND Procedure

•The APPEND procedure (and APPEND statement of the DATASETS procedure) is an efficient method for concatenating observations from a smaller data set to a larger data set. The BASE= data set option is reserved for the larger of the two data sets with the DATA= option for the smaller data set.

-APPEND 存储过程(和 DATASETS 存储过程的 APPEND 语句)是将较小数据集中的观测值连接到较大数据集中的有效方法。BASE= 数据集选项用于较大的数据集,DATA= 选项用于较小的数据集

/*将数据集 A 和 B 附加到 C */
proc append base = C data= A;  
run;
proc append base = C data= B;
run;
  • base=C 表示将数据集 A 的记录追加到数据集 C
  • data=A 表示数据集 A是要追加的源数据集。
  • base=C 表示将数据集 B 的记录追加到数据集 C。
  • data=B 表示数据集  B是要追加的源数据集。

注意事项:

  1. 目标数据集结构要求一致PROC APPEND 要求源数据集和目标数据集的结构相同(即,变量的数量、类型和名称都要一致)。如果目标数据集中缺少源数据集的某些变量,SAS 会在追加时生成缺失值。

  2. 不重新排序PROC APPEND 不会对目标数据集进行排序,它只是简单地将源数据集的记录追加到目标数据集的末尾。如果需要排序,可以在 APPEND 后使用 PROC SORT

  3. 高效性:与 DATA stepSET 语句相比,PROC APPEND 更高效,特别是在数据量较大的时候,因为它不会重新读取目标数据集,而是直接在目标数据集末尾追加记录。

interleaving data 数据整合

/*按性别对数据集 A 和 B 进行排序*/
/* sort the Same type of A B in C (here use gender)*/
proc sort data =A;
by gender;
proc sort data =B;
by gender;
run;
/*按性别创建有序数据集 C*/
data C;
set A B;
by gender;
run;

sorting data 分类数据
/*base in A the result output in B */
/*这将对数据集 A 进行排序,并将排序后的数据输出到数据集 B,替换其之前的内容。name*/
proc sort data=A out=B;  
by name;
run;
/* 按性别和年龄划分的数据集 A 的最终排序*/
proc sort data=A out=B;
by gender age ;
run;

Descending 递减函数
proc sort data=A out=B;
    by descending age; /*descending 按年龄递减:*/
run;

Report Output:

proc report :proc report 用于创建自定义报告。

data class;
input name $ gender $ age course major $;
cards;
John M 48 101 STAT
Peter F 58 101 HIST
Liz M  25 301 STAT
Joe M 28 201 RNGG
Mike M 34 202 HIST
;
run;

proc print data= class;
run;

/* 使用 proc report 创建报告,数据集为 class */
proc report data= class; 
/* 定义报告中将要显示的列 */
columns name gender age course major;
define name / display;             /* name 列以原样显示,不进行聚合或汇总 */
define gender / display width=20;  /* gender 列以原样显示,设置列宽为 20 */
define age / display;              /* age 列以原样显示 */
define course / display;           /* course 列以原样显示 */
define major / display;            /* major 列以原样显示 */
run;

proc report data= class;
columns name gender age course major;
define name / display;
/*order 表示将 gender 列的值按出现的顺序进行排序*/
define gender / order ;  
define course / display;
define major / display;
run;

Histogram 直方图

histogram is a graphical display of tabulated frequency. 直方图是以表格形式显示频率的图形显

在 SAS 中,可以使用 PROC UNIVARIATE、PROC CHART 或 PROC GCHART 生成直方图。

Syntax:

proc univarate data = dataset;
histogram variables / options;
run;

The components of the SAS histogram statement are:

  1. variance :

    • 如果未在 VAR 语句或 HISTOGRAM 语句中指定变量,则默认情况下,将为 DATA= 数据集中的每个数值变量创建一个直方图。

    • 如果您使用 VAR 语句并且未在 HISTOGRAM 语句中指定任何变量,则默认情况下,将为 VAR 语句中列出的每个变量创建一个直方图。

EG:
data cars2;
	set sashelp.cars;
run;
proc univariate data= cars2;
	var weight length ;  /*指定变量生成 weight 和 length 直方图*/
	histogram length; /*特定变量的 length 直方图*/
run;
proc univariate data=cars2;
	var invoice msrp;
	histogram invoice / normal midpoints=5.6 5.8 6.0 6.2 6.4
		cfill=darkviolet  /*cliff 直方图颜色设定*/
		ctext=bibg;
	/*histogram invoice: 为 invoice 变量绘制直方图。
	/ normal: 在直方图上叠加正态分布曲线。
	midpoints=5.6 5.8 6.0 6.2 6.4: 指定直方图的中点,这些值应与实际数据的范围相符。
	ctext=bibg: 设置文本颜色为蓝色(bibg 是一种颜色选项,具体定义可能依赖于SAS的颜色设置)。*/	
run;

2.Options

  • 向直方图添加特征。指定 SAS HISTOGRAM 语句中斜杠 (/) 后的所有选项。

Normal curve 正态曲线
title 'summary of weight variable (in pounds)';
Proc univarate data = sashelp.class noprint;/*noprint 隐藏汇总统计量*/
Histogam weight / normal ; /*normal 显示正态曲线*/
run;

  • SAS 直方图语句中可以有多个分析变量。每个变量在 SAS 中都有一个单独的直方图

具有不同可定制选项的 SAS 直方图
  • 添加cliff 选项填充直方图 颜色,添加inset 语句直接在图表中插入摘要统计数据框

  • by default ,图形内插图 bo 中的文字体为 font = simplex.

  • Midpoints = 选项指定直方图的中点

  • Ctext = 选项指定文本的颜色

proc univariate data=cars2;
	var invoice msrp;
	histogram invoice / normal midpoints=5.6 5.8 6.0 6.2 6.4
		ctext=bibg  cfill=darkviolet;
		inset N = 'number of students' median(8.2) mean(8.2) STD='Standard deviation' (8.3);
ru;
  • 在直方图中插入统计信息。

  • N = 'number of students' 表示插入的学生人数。

  • median(8.2) 表示插入中位数为 8.2。

  • mean(8.2) 表示插入均值为 8.2。

  • STD='Standard deviation' (8.3) 表示插入标准差,标签为“Standard deviation”,数值为 8.3。

  • 执行结果。

SAS Bar Chart 条形图

SAS bar chart shows the distribution of a categorical variable SAS 条形图显示类别变量的分布

the different types of SAS bar charts:

  • SAS simple bar chart SAS 简单条形图

  • SAS stacked bar chart (SAS grouped bar chart) SAS 堆 叠条形图(SAS 分组条形图)

  • SAS cluster bar chart (SAS bar chart side by side) SAS 集群条形图(SAS 并排条形图)。

The Proc SGPLOt Procedure

PROC SGPLOT : used to create a bar chart in SAS;

(PROC SGPLOT 用于在 SAS 中创建条形图)

VBAR statement is used to create a vertical SAS bar chart of the variable .(VBAR 语句用于创建变量的垂直 SAS 条形图。)

SAS simple bar chat:
EG:
/*为变量 “make” 生成条形图*/
proc SGplot data=sashelp.cars;
 /*vbar create **a vertical SAS** bar chart*/
vbar make  / group= origin;  /*根据origin 地区分组*/
title 'make bar chat';
run;

SAS Stacked Bar Chart:

一个变量的值相对于另一个变量表示。在这里,使用 GROUP= option 将柱线划分为组

The grouping variable is a categorical variable 种类变量 ,The grouping variable is a categorical variable

EG:
/*Generate a bar chat for variable “type” and group by origin with the title of ABC in SASHELP.cars*/
proc sgplot data=sashelp.cars;
vbar type / group= origin;
title 'ABC';
run;

results:

SAS Clustered Bar Chart簇状条形图

VBAR 语句添加选项 "GROUPDISPLAY = CLUSTER" 来指定并排组而不是堆叠组(stacked)

EG:
/*SAS Clustered Bar Chart簇状条形图*/
 /*VBAR 语句添加选项 **"GROUPDISPLAY = CLUSTER"** 来指定**并排组而不是堆叠组*/
proc sgplot data=sashelp.cars;
vbar type / group= origin groupdisplay= cluster; 
title 'SAS Clustered Bar Chart: ABC';
run;

SAS Pie Chart

  • SAS Pie Chart creates simple, group, or stacked charts that represent the relative contribution of the parts to the whole by displaying data as slices of a pie. Each slice represents a category of data. The size of a slice represents the contribution of the data to the total chart statistic.

(SAS 饼图通过将数据显示为饼图的切片来创建简单图、组图或堆积图,这些图表示各部分对整体的相对贡献。每个切片代表一个数据类别。切片的大小表示数据对 total 图表统计数据的贡献。)

Syntax EG:

使用 proc gchart

proc gchart data=sashelp.prdsal2; /* 使用 sashelp.prdsal2 数据集 */
    pie product / sumvar=actual /* 根据产品绘制饼图,实际销售额作为求和变量 */
        value=arrow /* 饼图的值标签使用箭头 */
        percent=arrow /* 显示百分比标签使用箭头 */
        noheading /* 不显示标题 */
        percent=inside /* 百分比标签放置在饼图内部 */
        plabel=(height=3pt) /* 设置百分比标签的字体高度为 3pt */
        slice=inside /* 切片标签放置在饼图内部 */
        value=none /* 不显示切片的值标签 */;
    format actual dollar20.2; /* 将实际销售额格式化为货币格式,保留两位小数 */
run; /* 执行该过程 */

SAS Boxplot (SAS 箱线图)

BOXPLOT in SAS creates side-by-side box-and-whiskers plots of measurements organized in groups. A box-and-whiskers plot displays the mean, quartiles, and minimum and maximum observations

BOXPLOT 可创建按组组织的测量的并排盒须图。盒须图显示组的均值、四分位数以及最小和最大观测值。

PROC SGPANEL and SGPLOT

  • PROC SGPLOT* is used to create bar charts 条形图 也可以用于创建箱形图

  • PROC SGPANEL to create boxplot 箱形图

data cars4;
 set sashelp.cars;
run;
/*面板划分使用 sgpanel*/
proc sgpanel data=cars4;
/*按origin 变量进行面板划分,设置为 1行 3列*/
	panelby  origin / rows =1 columns=3; 
/*绘制箱型图 boxplot ,变量horsepower按照type分类 */
	vbox horsepower / category = type;
run;



proc sgplot data=sashelp.cars;
	title 'sgplot creat vbox different with sgpanel ';
	vbox horsepower / category = type ;
run;




proc sgpanel data=cars4;
/*按origin 变量进行面板划分,设置为 1行 3列*/
	panelby  origin / rows =1 columns=3; 
/*绘制横轴箱型图 boxplot ,变量horsepower按照type分类 */
	hbox horsepower / category = type;
run;

Scatter Matrix in SAS 散点矩阵

scatter matrix consists of serval pairwise scatter plots that are presented in the form of a matrix . the matrix tells us the corrlation between different variables and whether they are positive or negative . Thet help us roughly determine if there is a correlation betwwen multiple variables.

散点矩阵由若干个以矩阵形式表示的成对散点图组成。矩阵告诉我们不同变量之间的相关性,以及它们是正的还是负的。它们帮助我们大致确定多个变量之间是否存在相关性。

Syntax:

/*Scatter Matrix in SAS*/
proc sgscatter data=sashelp.cars;
/*指定要在散点矩阵中展示的变量*/
/*按照 Origin 变量对数据进行分组,以不同的颜色或符号表示不同的原产地。*/
    matrix horsepower weight length Cylinders Invoice / group=Origin;
    title "Scatter Matrix of Selected Variables in Cars Dataset";
run;

results:

Kernel Density Estimates (FYI) 核密度估计值 (FYI)

• You can use the KERNEL option to superimpose kernel density estimates on histograms. Smoothing the data distribution with a kernel density estimate can be more effective than using a histogram to identify features that might be obscured by the choice of histogram bins or sampling variation. A kernel density estimate can also be more effective than a parametric curve fit when the process distribution is multi-modal.

您可以使用 KERNEL 选项将核密度估计叠加在直方图上。使用核密度估计值平滑数据分布可能比使用直方图来识别可能被直方图条柱或采样变化选择所掩盖的特征更有效。当过程分布是多模态时,核密度估计也可能比参数曲线拟合更有效。

Exercise 08_Sgplot megra histogram and matrix knowledge

/*Generate a scatter for the matrix of weight,length, and horsepower, and group by origin with diagonal (histogram kernel)*/

proc sgscatter data=sashelp.cars;
	title 'CARS';
	matrix weight length horsepower / group=origin
/*diagonal=(histogram kernel);:在对角线中显示直方图和核密度估计,提供每个变量的分布信息。*/
    diagonal=(histogram kernel);
run;

results: 您将获得一个散点矩阵,展示重量、车长和马力之间的关系,每个单元格中是这两个变量的散点图,而对角线则显示各变量的直方图和核密度估计。这有助于您更好地理解变量之间的关系及其分布情况

SAS Correlation Analysis – Understand the PROC CORR & Correlation Matrix

(SAS 相关性分析 – 了解 PROC CORR 和相关性矩阵)

We will be learning different aspects of SAS correlation analysis:

• Correlation analysis creation between two variables-在两个变量之间创建相关性分析 • Correlation analysis creation between all variables and SAS scatter plot-在所有变量和 SAS 散点图之间创建相关性分析 • SAS Correlation matrix of the relationship between variables-变量之间关系的 SAS 相关矩阵 • SAS PROC CORR Procedure-SAS PROC CORR 过程

SAS Correlation Analysis

• Correlation analysis in SAS is a method of statistical evaluation used to study the strength of a relationship between two, numerically measured, continuous variables (e.g. height and weight). 【SAS 中的相关性分析是一种统计评估方法,用于研究两个数值测量的连续变量(例如身高和体重)之间关系的强度。】

• SAS Correlation analysis is a particular type of analysis, useful when a researcher wants to establish if there are possible connections between variables. In other words, it’s a measure of how things are related.【SAS 相关性分析是一种特殊类型的分析,当研究人员想要确定变量之间是否存在可能的联系时,它非常有用。换句话说,它是衡量事物如何关联的指标。】

• The correlation coefficient (系数)is a measure of linear association between two variables in SAS. Values of the correlation coefficient are always between -1 and +1.

【相关系数是 SAS 中两个变量之间线性关联的度量。相关系数的值始终介于 -1 和 +1 之间。】

SAS PROC CORR Procedure

• The SAS PROC CORR procedure produces Pearson correlation coefficients of continuous numeric variables. 【SAS PROC CORR 过程生成连续数值变量的 Pearson 相关系数。】

  1. 两个变量的相关性分析
/*使用 proc corr 过程来计算相关系数,分析数据集 sashelp.cars 中变量之间的相关性。*/
proc corr data=sashelp.cars;
    title 'correlations analysis Two variables';
    /*分析的变量为 weight(重量)和 length(车长)*/
    var weight length ;
run;

多变量的相关性分析
proc corr data=sashelp.cars;
    title 'correlations analysis all variables';
    var MSRP invoice EngineSize cylinders horsepower ;
run;

SAS Correlation Matrix

• The relation between two variables and their correlation can also be expressed in the form of a scatter plot or a scatter plot matrix.两个变量之间的关系及其相关性也可以用散点图或散点图矩阵的形式表示。

syntax:
plots = matrix(options)
plots = scatter(options)
Example 1:
/*生成一个相关性矩阵图*/
proc corr data=sashelp.iris plots=matrix(histrogram);
run;

results:

Example 2:

L07 - Structuring Data and Confidence Intervals

Merging Data:

. SAS reads the descriptor information of each data set that is named in the MERGE statement.Then, SAS creates a program data vector that contains all the variables from all data sets as well as variables created by the DATA step

【SAS 读取 MERGE 语句中命名的每个数据集的描述符信息。 然后,SAS 创建一个程序数据向量,其中包含所有数据集中的所有变量以及 DATA 步骤创建的变量】

data C;
merge A B; /*将数据集A B合并*/
by name; /*两个数据集 A 和 B 都必须按照 name 变量进行排序*/
run;

全连接(Full Join)

全连接(Full Join)是将两个数据集中的所有记录都合并在一起。如果某个数据集没有对应的记录,会用缺失值填充

data fulljoin;
/*(in=A) 和 (in=B) 创建了两个临时变量 A 和 B,这些变量指示数据集 classweight 和 classheight 中每一行是否有记录被包含*/
merge classweight (in=A) classheight (in=B);
by name;
/*if A or B; 语句确保将两个数据集中的所有记录都合并,即使其中一个数据集没有匹配项。*/
if A or B;
run;
左连接(Left Join)
data leftjoin;
merge classweight (in=A) classheight (in=B);
by name;
if A;  /* 保留左表 (classweight) 的所有记录 */
run;
  • 用于将两个表(数据集)根据某个共同字段合并。左连接会保留左边(第一个)表的数据,即使右边(第二)表没有匹配的记录,右表中的不匹配数据会填充为缺失值.

  • 左连接通常通过 MERGE 语句和 in 选项来实现。

Far Left Join 只保留左表中没有匹配的记录
data farleftjoin;
merge classweight (in=A) classheight (in=B);
by name;
if A and not B;  /* 只保留左表(classweight)中有,右表(classheight)中没有的记录 */
run;
右连接(Right Join)
  • 右连接 会保留右表(第二个数据集)中的所有记录,而左表(第一个数据集)中没有匹配的记录会用缺失值填充。换句话说,右表中的所有记录都会出现在最终的合并结果中,而左表中没有匹配的记录将显示为缺失值

data rightjoin;
merge classweight (in=A) classheight (in=B);
by name;
if B;  /* 保留右表(classheight)的所有记录 */
run;
Far Right Join 只保留右表中没有匹配的记录
  • 是指在合并两个数据集时,仅保留 右表(第二个数据集)中有记录且在左表(第一个数据集)中没有匹配的记录。这种操作通常是在 MERGE 语句之后,通过 if 语句筛选出右表中没有匹配项的记录。

Inner Join 内连接

虽然 SAS 没有提供直接的 INNER JOIN 语法,但我们可以使用 MERGE 语句并配合 in 选项来模拟内连接。

/*Inner Join 内连接*/
data innerjoin;
merge classweight (in=A) classheight (in=B);
by name;
if A and B;  /* 只保留同时出现在两个数据集中的记录 */
run;

Confidence Intervals 置信区间

•A Confidence Interval is a range of values we are fairly sure our true value lies in. 置信区间是我们相当确定我们的真实值所在的值范围。

  • Use CLM or both LCLM and UCLM to compute a two-sided confidence limit for the mean. Use only LCLM or UCLM, to compute a one-sided confidence limit. 【使用 CLM 或同时使用 LCLM 和 UCLM 来计算平均值的双侧置信限。仅使用 LCLM 或 UCLM 来计算单侧置信限】

Example1:

data demo;
input x gender;
datalines;
45 0 
54 0
36 0
15 1
18 1
36 1
19 1
21 1
;
proc print;
run;

/*Example 1*/
/* 按性别计算均值和置信区间 */
proc means data= demo mean std n Lclm Uclm ALPHA=0.05 var;
/*proc means 过程用于计算均值、标准差(std)、观测数(n)以及均值的下限(LCLM)和上限(UCLM)置信区间。 ALPHA=0.05 指定了 95% 的置信水平。*/
var x;
by gender;
run;

Example2:

/*按性别 (sex) 分组的身高 (height) 的均值、标准差、观测数及置信区间。*/
proc means data=sashelp.class mean std n lclm uclm Alpha=0.05;
    class sex; /*按sex进行分组*/
    var height;
run;

Example3:

/*Example 3 
数据集创建:*/
Data test;
input subjno trt age;
cards;
1 1 25
2 2 30 
3 1 15
4 1 45
5 2 22 
6 2 54
;
run;
proc print data=test;
run;
proc sort data=test;
/*proc sort 按照 trt 变量对数据集进行排序,以便后续分析。*/
	by trt;
run;
/*计算按治疗组 (trt) 分组的年龄 (age) 的均值、标准差、观测数及置信区间。*/
proc means data=test n mean std LCLM UCLM  Alpha=0.05;
	var age;
	by trt;
run;

Exercise :

data employees;
input department $ age;
datalines;
HR 34
HR 29
HR 45
Sales 38 
Sales 50
Sales 25
IT 40
IT 42
IT 39
;
RUN;

PROC MEANS DATA=EMPLOYEES N MEAN std VAR LCLM uclm alpha=0.1;
VAR age; 
class department;
/*OUTPUT OUT=DEPT_STATS 语句创建了一个名为 DEPT_STATS 的输出数据集,包含计算的统计量。*/
output out=dept_stats std=std var=variance lclm=lclm uclm=uclm;
run;

L08 - T-test Linear Regression , One way ANOVA [L08 - T 检验、线性回归、单因子方差分析]

T-test

type: SAS simple t-test | SAS paired t-test | SAS two sample t-test
T 检验的类型:SAS 简单 t 检验、SAS 配对 t 检验和 SAS 双样本 t 检验
  • Assesses wheter the means of two groups are statistically different from eacher [评估两组的均值在统计上是否彼此不同]

  • sample size is small

  • independent variable : Only categoriacl variable [自变量:仅分类变量(例如,性别);]

  • Dependent variable: interval or ratio scale [因变量:区间或比率量表(例如,分数)]

Compare two group means 比较两组均值:

Calculating T:

Example 1: One example t-test

Step for One-sample t-test

Step 1: Define Null and Alternative Hypotheses

Step 2 : State Alpha | 3.Calculate Degrees of Freedom

Significance levels = Confidence levels [显著性水平 = 置信水平]

Two (Independent) samples t-Test

Example

step:

Different types of T-test

  • One sample test

    • You wanted to test that where your population mean is different than a constant value (known value). [您想要测试总体均值与常数值(已知值)不同的位置] • E.g., a school wants to test that average mean of GPA for grad students is 3.0. They will use one sample t-test and can get the result

  • Two sample t-test

    • You are interested in testing whether these two population has the same mean or different mean [您对检验这两个总体是具有相同的均值还是不同的均值感兴趣。]

    • In the same example if the school is interested in testing that average GPA for science major and arts major is the same

SAS T-Test

A t-test in SAS Programming is an analytical test used to determine if there is a significant difference between two sets of data, or if the average of a set of data differs significantly from a predicted value. [SAS 编程中的 t 检验是一种分析检验,用于确定两组数据之间是否存在显著差异,或者一组数据的平均值是否与预测值显著不同]

SAS PROC TTEST :

The SAS PROC TTEST is a procedure, which is used to carry out SAS t-test on a single variable and pair of variables. [SAS PROC TTEST 是一个程序,用于对单个变量和一对变量执行 SAS t 检验。]

SAS One-Sample T-Test

• Below we see one sample t-test SAS in which find the SAS t-test estimation for the variable weight_loss.

proc ttest data = clinic H0=4 Alpha=0.1;
var weight_loss;
Title 'TTEST OF H0 : Mean=4 for the clinic group';
run;

Sides = U (Right tailed test)

proc ttest data=time
H0=80 /*指定原假设(H0),即样本均值等于 80。该检验的目的是判断样本均值是否显著不同于 80。*/
Side=U /*指定检验的方向为单尾检验(upper tail test)。这意味着我们只关心样本均值是否大于 80,而不考虑小于 80 的情况。*/
alpha=0.05; /*设置显著性水平为 0.05。这表示在 5% 的显著性水平下,如果 p 值小于 0.05,则可以拒绝原假设。*/
var time; 
run;

这段代码的目的是通过单尾 t 检验来检验 time 变量的样本均值是否显著大于 80。在检验过程中,使用 5% 的显著性水平来判断结果是否显著。如果检验结果的 p 值小于 0.05,则可以拒绝原假设,认为样本均值显著大于 8

Sides = L (Left tailed test)

proc ttest data=time
H0=80 /*指定原假设(H0),即样本均值等于 80。该检验的目的是判断样本均值是否显著不同于 80。*/
Side=L       /* 指定进行左尾检验。 */
alpha=0.05;  /* 设置显著性水平为 0.05。 */
var time; 
run;

通过左尾 t 检验来检验 time 变量的样本均值是否显著小于 80。在检验过程中,使用 5% 的显著性水平来判断结果是否显著。如果检验结果的 p 值小于 0.05,则可以拒绝原假设,认为样本均值显著低于 80。P>0.05 则不拒绝原假设H0 , 则样本均值显著等于80.

Sides=2  (two tailed test)

proc ttest data=time
H0=80 /*指定原假设(H0),即样本均值等于 80。该检验的目的是判断样本均值是否显著不同于 80。*/
Side=2       /* 指定进行双尾检验。 */
alpha=0.05;  /* 设置显著性水平为 0.05。 */
var time; 
run;

 

通过双尾 t 检验来检验 time 变量的样本均值是否显著不同于 80。在检验过程中,使用 5% 的显著性水平来判断结果是否显著。如果检验结果的 p 值小于 0.05,则可以拒绝原假设,认为样本均值显著不同于 80,无论是大于还是小于 80。

ODS GRAPHICS OFF

proc ttest data=time 
H0=80 
/*指示生成图形输出,如均值比较图、置信区间图等,以可视化检验结果*/
PLOTS 
SIDES=U;
VAR time;
run;
/*关闭 ODS 图形功能。此行代码在运行 t 检验后关闭图形输出,意味着后续的 SAS 程序将不再生成图形*/
ODS GRAPHICS OFF;

在上面的例子中:

  1. ODS GRAPHICS OFF; 关闭了图形输出。
  2. PROC MEANS 运行时不会生成任何图形。
  3. PROC MEANS 执行完之后,使用 ODS GRAPHICS ON; 重新启用图形输出。

为什么使用 ODS GRAPHICS OFF

  1. 提高效率:在大规模的数据处理或批量任务中,生成图形可能会增加计算时间和资源消耗。如果不需要图形输出,关闭图形可以显著提高性能。

  2. 避免冗余输出:在某些情况下,你可能只关心过程的文本或表格输出,而不需要图形。使用 ODS GRAPHICS OFF 可以避免生成不必要的图形。

注意:

  • ODS GRAPHICS OFF 只影响图形输出,而不影响其他类型的输出(如文本或表格)。
  • 如果你想恢复图形输出,可以通过 ODS GRAPHICS ON 来重新启用图形功能。

总结:

  • ODS GRAPHICS OFF 用于关闭 SAS 图形输出,常用于提高效率或避免不必要的图形输出。
  • 关闭图形输出后,仍然会生成其他类型的输出,如表格数据和文本。

Two Sample T-Test SAS

•the SAS PROC TTEST procedure is used to test for the equality of means for a two-sample (independent group) SAS t-test.

[SAS PROC TTEST 过程用于检验双样本(独立组)SAS t 检验的均值相等性。]

• The typical hypotheses for a two-sample t-test are: Ho : μ

标签:知识点,run,变量,data,PROC,SAS,proc
From: https://blog.csdn.net/m0_62455441/article/details/144920096

相关文章

  • 统计学重要知识点笔记
    统计学笔记正态分布又称“高斯分布”,是一种常见的连续概率分布。它的概率密度函数由PDF表现:1.对称性:正态分布2.钟形曲线:它的曲线呈现类似钟形的形(bellshapedcurve)3.均值、方差和标准差:均值 (μ) 方差(σ²)标准差(σ)正态分布的方差、标准差、68-98-9......
  • Java必备知识点
    18.子类方法与父类的方法同名,并且参数个数、类型和数据也相同,那么子类的方法覆盖了父类的方法(也就是子类的方法声明和父类的方法声明一致)19.super调用父类方法和属性20.注释的那段代码的意思:通过创建一个Husband类的对象赋值给wife对象中的husband常量(因为在Wife这个类中hu......
  • 《docker基础篇:7.Docker容器数据卷》包括坑、回顾下上一讲的知识点,参数V、是什么、更
    @目录7.Docker容器数据卷7.1坑7.2回顾下上一讲的知识点,参数V7.3是什么7.4能干嘛7.5数据卷案例7.5.1宿主vs容器之间映射添加容器卷7.5.2读写规则映射添加说明7.5.3卷的继承和共享本人其他相关文章链接7.Docker容器数据卷7.1坑容器卷记得加入:--privileged=true问题:why......
  • VOLTE中eSRVCC相关的一些知识点
    注:本文中的SRVCC都是指eSRVCC方案。SRVCC相关的3GPP规范有:3GPPTS23.216SRVCC3GPPTS23.856 “SingleRadioVoiceCallContinuity(SRVCC)enhancement;Stage2.”3GPPTS23.237 IMSServiceContinuityStage23GPPTS24.237 IMSServiceContinuityStage3详......
  • Java学习教程,从入门到精通,Java Lambda 表达式语法知识点及案例代码(79)
    JavaLambda表达式语法知识点及案例代码Lambda表达式是Java8引入的一项重要特性,它允许我们将代码当作数据来传递,从而使代码更加简洁和易读。1.什么是Lambda表达式?Lambda表达式是一种匿名函数,它没有类和方法名,可以直接作为参数传递给方法或存储在变量中。2.Lambda表......
  • 2025/1/4 【双指针法】 卡码网54. 替换数字 知识点:str.isdigit()
    https://kamacoder.com/problempage.php?pid=1064双指针法,从后向前遍历: 借用一个list,从后向前遍历,碰到数字就换“number”存到对应索引上:defnumTostr(s:str):s_list=list(s)i=0forcharins:if'0'<=char<='9':s_list[i]=......
  • 华为-eNSP-IPV6静态路由知识点与基本配置
    什么是IPV6?  IPv6(InternetProtocolVersion6)是互联网工程任务组(IETF)设计的用于替代IPv4的下一代IP协议。IPv6的主要目的是解决IPv4网络地址资源不足的问题,同时也解决了多种接入设备连入互联网的障碍。IPV6的特点?1.巨大的地址空间:IPv6的地址长度为128位,理论上可以提供2^......
  • MyBatis 核心知识点详解:题目与解析
    MyBatis核心知识点详解:题目与解析MyBatis是一个强大的持久层框架,广泛应用于Java开发中。本文将结合具体的题目,详细解析MyBatis的核心知识点,包括事务控制、自增主键回填、参数获取、结果映射以及动态SQL,帮助大家更好地掌握这些内容。题目1:MyBatis控制事务关于MyBatis......
  • 软件设计师考试知识点
    https://www.cnblogs.com/mh20131118/p/11334612.html https://www.cnblogs.com/blog-cjz/p/16005106.html本人已将笔记、历年真题与解析、备考方法整理压缩至【百度网盘】,需要资源的同学可以通过点击下面云盘链接进行保存下载。链接失效的话请在文章下面评论或私信我,我看到的......
  • JavaScript 中最难理解的三个知识点,面试命中率 99% !
    原型与原型链说到原型,就不得不提一下构造函数,首先我们看下面一个简单的例子:functionDog(name,age){this.name=name;this.age=age;}letdog1=newDog("哈士奇",3);letdog2=newDog("泰迪",2);首先创造空的对象,再让this指向这个对象,通过this.n......