Re: [程式] SAS合併資料

看板Statistics作者 (Jean)時間11年前 (2012/11/08 11:57), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《ayurio (ayurio)》之銘言: : [程式問題]:SAS合併資料 : [軟體熟悉度]: : 新手(不到1個月) : [問題敘述]: : 手邊有兩個資料,一個是sas的資料檔,筆數有400多萬筆(檔案A), : 另外很多個是excel檔,可以匯入sas成為sas資料檔,每個檔案大概300多筆(檔案1) : 現在想把這兩個檔案就其中某個欄位的的特定字串做合併, : 例如 : A 檔案 : id name_A sal : 1 aa 120 : 2 aa 23 : 3 ab 12 : 4 cc 12 : 5 cc 23 : 1 檔案 : ob name_1 tat : 1 a1 3 : 2 aa 3 : 3 aa 23 : 4 bd 44 : 5 cc 14 : 我想就A檔案中的 name_A 這個欄位與1檔案的 name_1 欄位取同樣的字串來做合併, : 例如,檔案A的name_A欄跟1檔案的name_1欄都有看到aa跟cc字串, : 從兩檔案抓出aa的資料成為一個新資料集,同理cc也可抓出成另一個新資料集, : 可以的話資料集希望能用aa跟cc命名。 : [程式範例]: : proc sql; : create table xxx as select : from data A full join data 1 on (name_A=name_1); : quit; : 大致覺得可以用的程式碼如上,但是跑不出結果, : 希望有人可以賜教, : many tks! *第一點很重要的是,SAS中檔案名不能用數字做開頭; data A; input id name_A$ sal; cards; 1 aa 120 2 aa 23 3 ab 12 4 cc 12 5 cc 23 ; data data_1; input ob name_1$ tat; cards; 1 a1 3 2 aa 3 3 aa 23 4 bd 44 5 cc 14 ; run; *檔案A和檔案B都"都有"的,用JOIN就好; *(你可以把JOIN改成FULL JOIN試試看有什麼不同); PROC SQL; CREATE table set_join AS SELECT * FROM A AS A JOIN data_1 AS B ON A.name_A=B.name_1; QUIT; *不同的name分存成不同的資料; %macro set_data(in_data=set_join); proc sql noprint; select count(distinct(name_A)) into :NN from &in_data; quit; %let n_tot=&NN; proc sql noprint; select DISTINCT (name_A) into :idlist1-:idlist&n_tot from &in_data; quit; %do i=1 %to &NN; PROC SQL; CREATE table &&idlist&i AS SELECT * FROM &in_data WHERE name_A="&&idlist&i"; QUIT; %end; %mend; option mprint; run; %set_data; *MY two cents; -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.128.68.203
文章代碼(AID): #1Gcosfw9 (Statistics)
討論串 (同標題文章)
文章代碼(AID): #1Gcosfw9 (Statistics)