由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Statistics版 - DATA step能left join吗?
相关主题
SAS question using PROC SQL 高手请进, 包子答谢请教SAS LABEL问题。
问个PROC SQL中INNER JOIN的问题请问如果用SAS 解决这个问题
请教用SAS的一个数据处理的问题请教关于SAS表格输出的问题
sas proc report的问题请教flag问题
SAS question: count non-missing value for different variables请教proc sql处理missing value的问题
[合集] how to calculate column sum not row sum in SAS? thanks a lo包子问题请教( sas)
另外请教rtf 文件中 控制pagebreakPlease help with a SAS macro
怎样储存我想要的proc means 的结果?最大值和最小值输出
相关话题的讨论汇总
话题: patient话题: data话题: have2话题: year话题: have1
进入Statistics版参与讨论
1 (共1页)
F****3
发帖数: 1504
1
我用SQL是这样搞的:
proc sql;
create table WANT as
select distinct a.*, b.VAR1 , b.VAR2
from HAVE1 as a left join HAVE2 (DROP=link_count) as b
on a.PATIENT_ID = b.PATIENT_ID and a.YEAR = b.YEAR;
quit;
但是应为硬盘容量有限,所以只能用DATA STEP了。请问出来的WANTtable是不是一模一
样的啊?
proc sort data=HAVE1;
by PATIENT_ID YEAR;
run;
proc sort data=HAVE2(keep=PATIENT_ID YEAR VAR1 VAR2);
by PATIENT_ID YEAR;
run;
data WANT;
merge HAVE1 (in=a) HAVE2(in=b);
by PATIENT_ID YEAR;
if a;
run;
F****3
发帖数: 1504
2
另外请问一下用hash怎么搞呢?谢谢!
j******o
发帖数: 127
3
可以,如果你的文件太大,sort会很慢。用hash之前要确定你的内存够用。

【在 F****3 的大作中提到】
: 我用SQL是这样搞的:
: proc sql;
: create table WANT as
: select distinct a.*, b.VAR1 , b.VAR2
: from HAVE1 as a left join HAVE2 (DROP=link_count) as b
: on a.PATIENT_ID = b.PATIENT_ID and a.YEAR = b.YEAR;
: quit;
: 但是应为硬盘容量有限,所以只能用DATA STEP了。请问出来的WANTtable是不是一模一
: 样的啊?
: proc sort data=HAVE1;

F****3
发帖数: 1504
4
服务器内存是256GB,我可以用memsize option把它搞成max。请问这样应该就可以了吧?
请问为什么sql巨慢呢?我写的data step是不是做的事情和SQL的效果是一模一样啊?
谢谢!!!
D******n
发帖数: 2836
5
你的datasets都多大?

吧?

【在 F****3 的大作中提到】
: 服务器内存是256GB,我可以用memsize option把它搞成max。请问这样应该就可以了吧?
: 请问为什么sql巨慢呢?我写的data step是不是做的事情和SQL的效果是一模一样啊?
: 谢谢!!!

F****3
发帖数: 1504
6
两个文件,大的是400GB,小的是800 MB,应该能handle的。硬盘可用空间有1.4 tB,
每次都算的爆满然后爆掉。不知道是什么问题。。。
D******n
发帖数: 2836
7
a 是400G, b是800mb?

【在 F****3 的大作中提到】
: 两个文件,大的是400GB,小的是800 MB,应该能handle的。硬盘可用空间有1.4 tB,
: 每次都算的爆满然后爆掉。不知道是什么问题。。。

o*****m
发帖数: 950
8
可以。注意除了by variable, 其它变量不要有重名, 否则值可能被改

我用SQL是这样搞的:proc sql;

【在 F****3 的大作中提到】
: 我用SQL是这样搞的:
: proc sql;
: create table WANT as
: select distinct a.*, b.VAR1 , b.VAR2
: from HAVE1 as a left join HAVE2 (DROP=link_count) as b
: on a.PATIENT_ID = b.PATIENT_ID and a.YEAR = b.YEAR;
: quit;
: 但是应为硬盘容量有限,所以只能用DATA STEP了。请问出来的WANTtable是不是一模一
: 样的啊?
: proc sort data=HAVE1;

F****3
发帖数: 1504
9
是的。
不知道怎么搞的,在大data上运行不了。

【在 D******n 的大作中提到】
: a 是400G, b是800mb?
F****3
发帖数: 1504
10
真不好意思啊。你说的有重名,请问可以举一个例子吗?
假设Have1 有下面几个variable (400 GB的那个)
hospital_visit_id, date, time, patient_id, document_id
Have2有下面几个variable (800 MB的那个)
patient_id, document_id, diag_date, diag_type
应该就没有问题吧?
如果另外我把前面条件改动,让HAVE1和HAVE2都有一个共同的variable叫comomon_
variable,这种情况就会出现你提到的改动问题吧?谢谢!

【在 o*****m 的大作中提到】
: 可以。注意除了by variable, 其它变量不要有重名, 否则值可能被改
:
: 我用SQL是这样搞的:proc sql;

相关主题
[合集] how to calculate column sum not row sum in SAS? thanks a lo请教SAS LABEL问题。
另外请教rtf 文件中 控制pagebreak请问如果用SAS 解决这个问题
怎样储存我想要的proc means 的结果?请教关于SAS表格输出的问题
进入Statistics版参与讨论
s******8
发帖数: 102
11
你这种情况是该用hash,假设have2是800M.
data merged;
length var1 var2 $8.;*这里要根据实际情况改,但必须定义var1 var2;
if _n_=1 then do;
dcl hash h(dataset:"have2");
h.definekey("PATIENT_ID","YEAR");
h.definedata("VAR1","VAR2");
h.definedone();
call missing(var1,var2);
end;
set have1;
if h.find() ne 0 then call missing(var1,var2);
run;
F****3
发帖数: 1504
12
太谢谢了!

【在 s******8 的大作中提到】
: 你这种情况是该用hash,假设have2是800M.
: data merged;
: length var1 var2 $8.;*这里要根据实际情况改,但必须定义var1 var2;
: if _n_=1 then do;
: dcl hash h(dataset:"have2");
: h.definekey("PATIENT_ID","YEAR");
: h.definedata("VAR1","VAR2");
: h.definedone();
: call missing(var1,var2);
: end;

s******0
发帖数: 1269
13
mark
s*********h
发帖数: 6288
14
马克

【在 s******8 的大作中提到】
: 你这种情况是该用hash,假设have2是800M.
: data merged;
: length var1 var2 $8.;*这里要根据实际情况改,但必须定义var1 var2;
: if _n_=1 then do;
: dcl hash h(dataset:"have2");
: h.definekey("PATIENT_ID","YEAR");
: h.definedata("VAR1","VAR2");
: h.definedone();
: call missing(var1,var2);
: end;

g****8
发帖数: 2828
15
学习

【在 s******8 的大作中提到】
: 你这种情况是该用hash,假设have2是800M.
: data merged;
: length var1 var2 $8.;*这里要根据实际情况改,但必须定义var1 var2;
: if _n_=1 then do;
: dcl hash h(dataset:"have2");
: h.definekey("PATIENT_ID","YEAR");
: h.definedata("VAR1","VAR2");
: h.definedone();
: call missing(var1,var2);
: end;

o****o
发帖数: 8077
16
你这个先不能把两个数据分别distinct了么?
分别有多少duplicates?
把第二个用index,然后用SET KEY=就行了,很快的

【在 F****3 的大作中提到】
: 我用SQL是这样搞的:
: proc sql;
: create table WANT as
: select distinct a.*, b.VAR1 , b.VAR2
: from HAVE1 as a left join HAVE2 (DROP=link_count) as b
: on a.PATIENT_ID = b.PATIENT_ID and a.YEAR = b.YEAR;
: quit;
: 但是应为硬盘容量有限,所以只能用DATA STEP了。请问出来的WANTtable是不是一模一
: 样的啊?
: proc sort data=HAVE1;

1 (共1页)
进入Statistics版参与讨论
相关主题
最大值和最小值输出SAS question: count non-missing value for different variables
Proc Surveyselect中, 当 reps >=2 时, 样本重复[合集] how to calculate column sum not row sum in SAS? thanks a lo
我也来请教一个SAS问题另外请教rtf 文件中 控制pagebreak
如何在R里refer上一个row的值怎样储存我想要的proc means 的结果?
SAS question using PROC SQL 高手请进, 包子答谢请教SAS LABEL问题。
问个PROC SQL中INNER JOIN的问题请问如果用SAS 解决这个问题
请教用SAS的一个数据处理的问题请教关于SAS表格输出的问题
sas proc report的问题请教flag问题
相关话题的讨论汇总
话题: patient话题: data话题: have2话题: year话题: have1