最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

SAS Training 003 - R reshape | SAS transpose

2021-08-13 00:11 作者:陸震同學(xué)  | 我要投稿

無論是做 table,還是統(tǒng)計(jì)分析,我們都需要提前準(zhǔn)備對(duì)應(yīng)的數(shù)據(jù)集。這其中,數(shù)據(jù)集的數(shù)據(jù)結(jié)構(gòu)尤為重要,合適的格式能減少 programming 中的報(bào)錯(cuò)。今天我們來講長(zhǎng)、寬數(shù)據(jù)格式的轉(zhuǎn)置。

在 R 中,我們稱長(zhǎng)寬數(shù)據(jù)的轉(zhuǎn)置為 reshape,相信很多小伙伴都非常熟悉;而在 SAS 中,對(duì)應(yīng)的操作為 proc transpose。雖然我們也可以利用 data 步來完成(極其地 tedious),但是遠(yuǎn)沒有 proc transpose 來得簡(jiǎn)潔明了。我們這里重點(diǎn)聊 SAS 的 transpose,R 中的操作我們留到 R Training 的推送。

數(shù)據(jù)結(jié)構(gòu)

wide data

我們常接觸的 excel 文件數(shù)據(jù),一般為一行為一個(gè) unique 的觀測(cè),一列為一個(gè)單獨(dú)的變量,這是我們所熟悉的,我們將這種格式稱為 wide data。一般這種格式用來做什么呢?如,分析兩個(gè)變量的相關(guān)關(guān)系,做 t 檢驗(yàn)等等,這么一說,是不是感覺知識(shí)都回來了,不再局限于 wide data 這個(gè)名頭了?

long data / narrow data

是的,wide data 數(shù)據(jù)一般一個(gè)觀測(cè)只有一行數(shù)據(jù),每個(gè)變量有一列。但是,我們也接觸過這樣的數(shù)據(jù):臨床試驗(yàn)中,我們對(duì)受試者進(jìn)行有規(guī)律的訪視,每個(gè) subject 每次 visit,我們都會(huì)記錄生成一行數(shù)據(jù),如此下來,結(jié)束隨訪時(shí),每個(gè) subject 會(huì)擁有多行數(shù)據(jù),且每行里有 cell 會(huì)記錄該行 visit 的日期,我們直接上圖:

這樣的話,對(duì)于 long data 的理解就清晰多了,其對(duì)應(yīng)的 wide data 如下:

顯然,我們經(jīng)常接觸下面的 wide 格式,如果我們想比較兩次 wight 之間變化關(guān)系,應(yīng)用這種格式就方便多了。但是,對(duì)于上面的 long 格式呢,我們?nèi)绻朕D(zhuǎn)成 wide,怎么操作?或者由 wide 轉(zhuǎn)為 long,又如何操作?

proc transpose

首先來介紹 syntax:

PROC TRANSPOSE DATA= Dataset-name OUT= New-dataset-name;
? ?BY variable(s);
? ?ID variable;
? ?VAR variable(s);
RUN;

我們分兩種情況來討論。

long data -> wide data 長(zhǎng)轉(zhuǎn)寬

  1. by 組變量確定新 dataset 的行分類結(jié)構(gòu)(wide 中 row identification variable 需要 by 組 變量唯一確定);

  2. id 變量確定新 dataset 的列分組情況,id 變量的每一種 unique 取值在格式化后將成為轉(zhuǎn)置后新數(shù)據(jù)集的新列變量名。特殊地,若 id statement 含多個(gè)變量,則這些變量取值的 unique 組合將成為新列名。要注意的是,由于 id 變量對(duì)應(yīng)列分組,在新 dataset 的行分類結(jié)構(gòu)已確定之下,id 變量每種取值所對(duì)應(yīng)的需要轉(zhuǎn)置的變量的取值在數(shù)據(jù)集中必須是唯一的;

  3. var 指示需要進(jìn)行轉(zhuǎn)置填充新 dataset 中 cell 的變量,若 var 缺省,默認(rèn)轉(zhuǎn)置全部 numeric variables。轉(zhuǎn)置中,SAS 自動(dòng)創(chuàng)建變量 _name_,它以 var 變量名為取值。

來看 code:

data work.narrow_file2;
? ?infile cards;
? ?length pet_owner $10 pet $4 population 8;
? ?input pet_owner $ pet $ population;
? ?cards;
? ? ? ?Mr.Black dog 2
? ? ? ?Mr.Black cat 1
? ? ? ?Mrs.Brown dog 1
? ? ? ?Mrs.Brown cat 0
? ? ? ?Mrs.Green fish 5
? ? ? ?Mr.White fish 7
? ? ? ?Mr.White dog 1
? ? ? ?Mr.White cat 3
? ?;
? ?
? ?proc print data= work.narrow_file2 noobs;
? ? ? ?title "原 long data";
run;

原數(shù)據(jù)集:

進(jìn)行長(zhǎng)轉(zhuǎn)寬:

proc sort data= work.narrow_file2 out= work.sorted_narrow_file2;
? ?by pet_owner;
run;
proc transpose data= work.sorted_narrow_file2 out= work.narrow_file2_transp_id_by name= column_that_was_transposed;
? ?by pet_owner;
? ?id pet;
? ?var population;
run;
proc print data= work.narrow_file2_transp_id_by noobs;
? ?title "新 wide data";
run;

看看你能不能和原數(shù)據(jù)集對(duì)應(yīng)上。

wide data -> long data 寬轉(zhuǎn)長(zhǎng)

  1. by 組變量確定新 dataset 的行分類結(jié)構(gòu)(long 中單個(gè)觀測(cè)多行數(shù)據(jù),row identification variable 即為 by 組變量,by 組變量在多行間重復(fù));

  2. id 變量確定新 dataset 的列分組情況;

  3. var 中每個(gè)變量將成為新 dataset 中某列變量的每一行。

上 code,將前面轉(zhuǎn)置后的 wide data 轉(zhuǎn)回去:

proc transpose data= work.narrow_file2_transp_id_by out= reverse name= pet;
? ?by pet_owner;
? ?id column_that_was_transposed;
? ?var dog cat fish;
run;
proc print data= reverse noobs;
? ?title "轉(zhuǎn)回 long data";
run;

前后對(duì)比一下,proc transpose 相信你已經(jīng)掌握了??


SAS Training 003 - R reshape | SAS transpose的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
中宁县| 福海县| 招远市| 沙湾县| 志丹县| 方正县| 天长市| 荣成市| 绵阳市| 信宜市| 伊宁县| 闵行区| 天柱县| 玛曲县| 专栏| 五河县| 清水河县| 伊宁市| 乌拉特前旗| 宜君县| 黔西县| 齐齐哈尔市| 楚雄市| 邢台市| 宜春市| 讷河市| 丹凤县| 克什克腾旗| 和龙市| 于田县| 樟树市| 灵武市| 锡林浩特市| 鄂托克前旗| 洛阳市| 高碑店市| 梅河口市| 平果县| 大厂| 芮城县| 宁强县|