Re: [程式] SAS合併資料
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):