找到你需要的數(shù)據(jù)

在上一篇《提出你的研究問題》中,我們選定 NESARC 數(shù)據(jù)集,想研究的問題是尼古丁依賴。我們想知道尼古丁依賴是否和吸煙有關(guān)?也想知道,要吸多少煙才會產(chǎn)生尼古丁依賴?

如之前所說,需要查看我們的 Codebook 中有多少變量是和我們的研究相關(guān)的。觀察Codebook 后,跟我們的問題相關(guān)的變量有:過去12個月是否香煙依賴(TAB12MDX),過去12個月是否吸煙(CHECK321),平時的吸煙頻率(S3AQ3B1),平時的吸煙數(shù)量(S3AQ3C1)等等。我們現(xiàn)在想做的是:把這些變量篩選出來,進行分析,看看吸煙頻次和數(shù)量,是否和尼古丁依賴正相關(guān)。

聽起來很簡單,但是在這之前,我們還要做一些篩選工作,比如要在數(shù)據(jù)中篩選出過去年齡為18-25歲的,過去12個月內(nèi)有吸煙的人做研究。

為什么要篩選呢?可以理解成,因為數(shù)據(jù)覆蓋的范圍越大,有可能對結(jié)果產(chǎn)生干擾因素的變量就越多,如果我們?yōu)榱苏业絻蓚€因素是否彼此是相關(guān)的,最理想的情況是整個樣本的其他參數(shù)都是一樣的,只有這兩個因素有變化,當然,這在現(xiàn)實中是不可能的。所以我們只能盡量的去控制樣本的一致性,年齡可能是一個影響因素,我們就只選定18-25的年輕人,而過去吸煙現(xiàn)在不吸煙這樣的數(shù)據(jù)也許對我們有干擾,所以我們把他們?nèi)コ簟?/p>

這就是我們將要學習的第一段 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;

它的功能是:

  1. 建立一個叫做 mydata 的邏輯庫;
  2. 讀取 nesarc_pds 的數(shù)據(jù);
  3. 將不同的數(shù)據(jù)分別加上標簽;
  4. 篩選數(shù)據(jù);
  5. 將數(shù)據(jù)按照 IDNUM 排序,并保存到新的數(shù)據(jù)集;
  6. 查看其中幾個變量的頻數(shù);

我來一個一個解釋下:

  1. 建立一個叫做 mydata 的邏輯庫;
LIBNAME mydata "/courses/d1406ae5ba27fe300 " access=readonly; 

Libname 指“Library Name”,可以告訴 SAS 去哪里找數(shù)據(jù),mydata就是 library 的名稱,引號內(nèi)的則是數(shù)據(jù)文件所保存的路徑,access=readonly'Libname 的一個設(shè)置,設(shè)置成只讀后我們的操作就不會對數(shù)據(jù)本身造成影響,結(jié)尾的分號,是 SAS 語句的結(jié)尾,每一句 SAS 語句都需要用分號結(jié)束。

SAS 會建立一個 Library,并命名為 mydata,這個邏輯庫在硬盤中的保存位置是“/courses/d1406ae5ba27fe300 ”,可以通過 mydata.數(shù)據(jù)集名來指定具體的數(shù)據(jù)集。

  1. 讀取 nesarc_pds 的數(shù)據(jù);
DATA new; set mydata.nesarc_pds;

DATA在 SAS 中是很常用的功能,也叫做 Data Step,可以用來處理數(shù)據(jù);

new是新的數(shù)據(jù)集的名稱;

SET在 Data Step 中,可以告訴 SAS 我們需要分析的數(shù)據(jù)集的名稱,并在運行時加載這個數(shù)據(jù)集;

開啟一個 DataStep,同時指定新的數(shù)據(jù)集名稱為 New,保存在默認的 work libraray。

讀取mydata.narc_pds 這個數(shù)據(jù)集;

  1. 將不同的數(shù)據(jù)分別加上標簽;
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 中可以為變量設(shè)置不同的標簽;

SAS 的數(shù)據(jù)集中, 每個變量可以保存它的 Name、Type(數(shù)字或文本)、Length、Label、Format(格式)、Informat 六個屬性信息;

因為原始的變量名字,很難記住具體的所反應的意義,所以,通過修改標簽的方式,讓我們在觀察報告的時候,更清楚的知道每個變量所指代的數(shù)據(jù)是什么一意義。

  1. 篩選數(shù)據(jù);

    IF CHECK321=1;
    IF AGE LE 25;

通過 IF條件,來篩選出合適的數(shù)據(jù)集;這里可以使用 Where;

  1. 將數(shù)據(jù)按照 IDNUM 排序,并保存到新的數(shù)據(jù)集;
PROC SORT; by IDNUM;

Proc Step 是 SAS 的兩種程序處理方式的之一,一種是上面提到的 Data Step,用來處理數(shù)據(jù)集,另一種這是這樣的 Proc Step,用來對數(shù)據(jù)進行分析和報告;

Proc Sort 的功能是給數(shù)據(jù)集排序,如果是單獨使用的話,代碼是:

Proc Sort Data=work.new;by IDNUM;run;

這里因為寫在了 Data Step 里,因此省略了 制定 Data 的選項,同時在最后有不用寫 run;

  1. 查看其中幾個變量的頻數(shù);
PROC FREQ; TABLES TAB12MDX CHECK321 S3AQ3B1 S3AQ3C1 AGE;
RUN;

Proc Freq 可以用來查看變量的頻數(shù)分布,使用方法是,在具體想要查看的變量之前加上 Tables 就可以啦;

部分結(jié)果:

可以看到Proc Freq 顯示了 Label:"Tobacco Dependence Past 12 Months",并記錄了 TAB12MDX 這個變量,即"過去12個月是否有尼古丁依賴"(0或1代表有或沒有)兩個值的頻率分布,以及累積頻率。

僅僅從這個表中,我們能判斷的信息還是非常有限的,因為數(shù)據(jù)可能還需要進一步處理,比如,有些變量不止有0和1,那是怎么回事?


相關(guān)文章:

學習數(shù)據(jù)分析卻沒有合適的數(shù)據(jù)集?
提出你的研究問題
安裝 SAS Studio

參考資料:

數(shù)據(jù)管理與可視化 - 衛(wèi)斯連大學

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容