在上一篇《提出你的研究问题》中,我们选定 NESARC 数据集,想研究的问题是尼古丁依赖。我们想知道尼古丁依赖是否和吸烟有关?也想知道,要吸多少烟才会产生尼古丁依赖?
如之前所说,需要查看我们的 Codebook 中有多少变量是和我们的研究相关的。观察Codebook 后,跟我们的问题相关的变量有:过去12个月是否香烟依赖(TAB12MDX),过去12个月是否吸烟(CHECK321),平时的吸烟频率(S3AQ3B1),平时的吸烟数量(S3AQ3C1)等等。我们现在想做的是:把这些变量筛选出来,进行分析,看看吸烟频次和数量,是否和尼古丁依赖正相关。
听起来很简单,但是在这之前,我们还要做一些筛选工作,比如要在数据中筛选出过去年龄为18-25岁的,过去12个月内有吸烟的人做研究。
为什么要筛选呢?可以理解成,因为数据覆盖的范围越大,有可能对结果产生干扰因素的变量就越多,如果我们为了找到两个因素是否彼此是相关的,最理想的情况是整个样本的其他参数都是一样的,只有这两个因素有变化,当然,这在现实中是不可能的。所以我们只能尽量的去控制样本的一致性,年龄可能是一个影响因素,我们就只选定18-25的年轻人,而过去吸烟现在不吸烟这样的数据也许对我们有干扰,所以我们把他们去除掉。
这就是我们将要学习的第一段 SAS 程序代码!
LIBNAME mydata "/courses/d1406ae5ba27fe300 " access=readonly;
DATA new; set mydata.nesarc_pds;
LABEL TAB12MDX="Tobacco Dependence Past 12 Months" CHECK321="Smoked Cigarettes in Past 12 Months" S3AQ3B1="Usual Smoking Frequency"
S3AQ3C1="Usual Smoking Quantity";
/*subsetting the data to include only past 12 month smokers, age 18-25*/
IF CHECK321=1;
IF AGE LE 25;
PROC SORT; by IDNUM;
PROC FREQ; TABLES TAB12MDX CHECK321 S3AQ3B1 S3AQ3C1 AGE;
RUN;
它的功能是:
- 建立一个叫做 mydata 的逻辑库;
- 读取 nesarc_pds 的数据;
- 将不同的数据分别加上标签;
- 筛选数据;
- 将数据按照 IDNUM 排序,并保存到新的数据集;
- 查看其中几个变量的频数;
我来一个一个解释下:
-
建立一个叫做 mydata 的逻辑库;
LIBNAME mydata "/courses/d1406ae5ba27fe300 " access=readonly;
Libname
指“Library Name”,可以告诉 SAS 去哪里找数据,mydata
就是 library 的名称,引号内的则是数据文件所保存的路径,access=readonly'
Libname 的一个设置,设置成只读后我们的操作就不会对数据本身造成影响,结尾的分号,是 SAS 语句的结尾,每一句 SAS 语句都需要用分号结束。
SAS 会建立一个 Library,并命名为 mydata,这个逻辑库在硬盘中的保存位置是“/courses/d1406ae5ba27fe300 ”,可以通过 mydata.数据集名
来指定具体的数据集。
-
读取 nesarc_pds 的数据;
DATA new; set mydata.nesarc_pds;
DATA
在 SAS 中是很常用的功能,也叫做 Data Step,可以用来处理数据;
new
是新的数据集的名称;
SET
在 Data Step 中,可以告诉 SAS 我们需要分析的数据集的名称,并在运行时加载这个数据集;
开启一个 DataStep,同时指定新的数据集名称为 New,保存在默认的 work libraray。
读取mydata.narc_pds 这个数据集;
-
将不同的数据分别加上标签;
LABEL TAB12MDX="Tobacco Dependence Past 12 Months" CHECK321="Smoked Cigarettes in Past 12 Months"
S3AQ3B1="Usual Smoking Frequency"
S3AQ3C1="Usual Smoking Quantity";
Label 命令在 Data Step 中可以为变量设置不同的标签;
SAS 的数据集中, 每个变量可以保存它的 Name、Type(数字或文本)、Length、Label、Format(格式)、Informat 六个属性信息;
因为原始的变量名字,很难记住具体的所反应的意义,所以,通过修改标签的方式,让我们在观察报告的时候,更清楚的知道每个变量所指代的数据是什么一意义。
-
筛选数据;
IF CHECK321=1;
IF AGE LE 25;
通过 IF条件,来筛选出合适的数据集;这里可以使用 Where;
-
将数据按照 IDNUM 排序,并保存到新的数据集;
PROC SORT; by IDNUM;
Proc Step 是 SAS 的两种程序处理方式的之一,一种是上面提到的 Data Step,用来处理数据集,另一种这是这样的 Proc Step,用来对数据进行分析和报告;
Proc Sort 的功能是给数据集排序,如果是单独使用的话,代码是:
Proc Sort Data=work.new;by IDNUM;run;
这里因为写在了 Data Step 里,因此省略了 制定 Data 的选项,同时在最后有不用写 run;
-
查看其中几个变量的频数;
PROC FREQ; TABLES TAB12MDX CHECK321 S3AQ3B1 S3AQ3C1 AGE;
RUN;
Proc Freq 可以用来查看变量的频数分布,使用方法是,在具体想要查看的变量之前加上 Tables 就可以啦;
部分结果:
可以看到Proc Freq 显示了 Label:"Tobacco Dependence Past 12 Months",并记录了 TAB12MDX 这个变量,即"过去12个月是否有尼古丁依赖"(0或1代表有或没有)两个值的频率分布,以及累积频率。
仅仅从这个表中,我们能判断的信息还是非常有限的,因为数据可能还需要进一步处理,比如,有些变量不止有0和1,那是怎么回事?
相关文章:
学习数据分析却没有合适的数据集?
提出你的研究问题
安装 SAS Studio
参考资料: