天天看点

sas 分析分类数据(1)

本篇主要通过案例分析, 了解和掌握sas的一些基础知识。

基础知识点有:

目录

创建sas数据集

了解proc mean & proc freq 过程步

给变量添标签

给变量值添加标签

重编码数据

用输出格式重编码变量

创建sas数据集

data quest;
	input ID          $  1-3
		  AGE            4-5
		  GENDER      $    6
		  RACE        $    7
		  MARITAL     $    8
		  EDUCATION   $    9
		  PRESIDENT       10
		  ARMS            11
		  CITIES          12;
	DATALINES;
	001091111232
	002452222422
	003351324442
	004271111121
	005682132333
	006651243425
	;
run;
           

了解proc mean & proc freq 过程步

/*
maxdec=2 表示保留小数点后两位
n        表示计算未缺失观测值数量
mean     表示计算平均数
std      表示计算标准差
clm      表示计算平均数的95%置信区间
*/

proc means data=quest maxdec=2 n mean std clm;
	title "questionnair analysis";
	var age;
run;

proc freq data=quest;
	title "Frequency counts for categorical variables";
	tables GENDER RACE MARITAL EDUCATION PRESIDENT ARMS CITIES;  /*tables 语句后,列出需要计算频数的各个变量*/
	/*tables GENDER -- CITIES;  /*符号--, 表示包含数据集从GENDER到CITIES之间依次排列的所有变量*/
run;
           

给变量添标签

**给变量添标签;
/*可以利用label语句给每个变量名打上标签,但标签字符至多包括256个字符(每个空格算一个字符) 且必须在单或双引号内*/

data quest;
	input ID          $  1-3
		  AGE            4-5
		  GENDER      $    6
		  RACE        $    7
		  MARITAL     $    8
		  EDUCATION   $    9
		  PRESIDENT       10
		  ARMS            11
		  CITIES          12;
	
	label MARITAL   = "婚姻状况"
		  EDUCATION = "教育水平"
		  PRESIDENT = "对总统工作的评价"
		  ARMS      = "增加军费的开支"
		  CITIES    = "对大城市提供政府援助";
	
	DATALINES;
	001091111232
	002452222422
	003351324442
	004271111121
	005682132333
	006651243425
	;
run;
           

给变量值添加标签

**给变量值添加标签(输出格式);
/*1.为每个变量定义变量值的内容*/
/*2.使用format语句与1个或多个变量名联系起来*/

/*
$SEXFMT 表示输出格式名 (长度为1-32个字符);
'1'     表示变量值
'Male'  表示输出格式值(最长为32767字符)    

输出格式名设置注意点:
1.最好不以数字结尾,不可与sas内置格式名相同, 格式名和变量名可以相同;
2.可以是一个单独值、一个范围、关键词或三者结合;
3.若对字符变量定义输出格式,格式名必须以符号"$"开头;

*/

/*
在DATA步骤或PROC步骤中均可以使用format语句;
若把format语句放在data步,在之后的的所有过程中格式的值和指定的变量关联;
若把format语句放在PROC步,格式的值将只影响该过程;
*/

proc format;
	value $SEXFMT  '1' = 'Male'
	               '2' = 'Female'
				   other = 'Miscoded'
				   ;

	value $RACE    '1' = 'white'
				   '2' = 'african am.'
				   '3' = 'hispanic'
				   '4' = 'other'
				   ;
				   
	value $OSCAR   '1' = 'single'
				   '2' = 'married'
				   '3' = 'widowed'
				   '4' = 'divorced'
				   ;
				   
	value $EDUC    '1' = 'high sch or less'
				   '2' = 'two yr. college'
				   '3' = 'four yr. college'
				   '4' = 'graduate degree'
				   ;
				   
	value LIKERT   1 = 'str disagree'
				   2 = 'disagree'
				   3 = 'no opinion'
				   4 = 'agree'
				   5 = 'str agree'
				   ;
				   
	value AGEFMT   1 = '0-20'
				   2 = '21-40'
				   3 = '41-60'
				   4 = '>60'
				   ;
run;

/*format语句放在DATA步骤中*/

data quest;
	input ID          $  1-3
		  AGE            4-5
		  GENDER      $    6
		  RACE        $    7
		  MARITAL     $    8
		  EDUCATION   $    9
		  PRESIDENT       10
		  ARMS            11
		  CITIES          12;
	
	label MARITAL   = "婚姻状况"
		  EDUCATION = "教育水平"
		  PRESIDENT = "对总统工作的评价"
		  ARMS      = "增加军费的开支"
		  CITIES    = "对大城市提供政府援助"
		  ;
		  
	format GENDER        $SEXFMT.   /*在format语句中,每个格式名后应有一个句号(.),目的有助于区别变量名和格式名*/
		   RACE          $RACE.
		   MARITAL       $OSCAR.
		   EDUCATION     $EDUC.
		   PRESIDENT ARMS CITIES LIKERT.
		   ;
	
	DATALINES;
	001091111232
	002452222422
	003351324442
	004271111121
	005682132333
	006651243425
	;
run;	
	
           

重编码数据

**重编码数据;	
/*	
if condition  then statement;
else if condition then statement;	
*/
data quest;
	input ID          $  1-3
		  AGE            4-5
		  GENDER      $    6
		  RACE        $    7
		  MARITAL     $    8
		  EDUCATION   $    9
		  PRESIDENT       10
		  ARMS            11
		  CITIES          12;
		  
	if age > 0 and age <= 20 then AGEGRP = 1;
	else if age > 20 and age <= 40 then AGEGRP = 2;
	else if age > 40 and age <= 60 then AGEGRP = 3;
	else if age > 60 then AGEGRP = 4;
	
	label MARITAL   = "婚姻状况"
		  EDUCATION = "教育水平"
		  PRESIDENT = "对总统工作的评价"
		  ARMS      = "增加军费的开支"
		  CITIES    = "对大城市提供政府援助"
		  AGEGRP    = "年龄组"
		  ;
		  
	format GENDER        $SEXFMT.  
		   RACE          $RACE.
		   MARITAL       $OSCAR.
		   EDUCATION     $EDUC.
		   PRESIDENT ARMS CITIES LIKERT.
		   ;
	
	DATALINES;
	001091111232
	002452222422
	003351324442
	004271111121
	005682132333
	006651243425
	;
run;	
	
proc freq data=quest;
	tables GENDER -- AGEGRP;  
run;
           

用输出格式重编码变量

/*使用输出格式重编码变量*/
/*在不生成新变量的情况下重编码AGE的方法*/

/*
关键词 LOW , HIGH, OTHER
LOW & HIGH: 分别用来指定数据集中最小值和最大值(不包括缺失值) ;
OTHER: 代表在之前设定的格式范围中没有出现的其他值;
LOW-20 :表示从最小值到20之间的所有值;
注意:数值型变量中,关键词LOW不包括缺失值,但字符型型变量则包括;

*/

proc format;
	value AGEGRP LOW-20  = '0-20'
				 21-40   = '21-40'
				 41-60   = '41-60'
				 60-HIGH = '>60'
				 .       = 'NULL'
				 OTHER   = 'OUT OF RANGE'
				 ;
run;

proc freq data=quest;
	tables age;
	format age AGEGRP.;
run;