作者JeanYCY (Jean)
站内Statistics
标题Re: [程式] SAS合并资料
时间Thu Nov 8 11:57:24 2012
※ 引述《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