R 在SAS中合并列

R 在SAS中合并列,r,sas,R,Sas,我有两个数据集,它们来自不同的来源,但包含相似的变量。一个类似的变量是来自数据集A的“程序”和来自数据集B的“手术程序” 我已经将这两个数据集合并成一个巨大的数据集,我们称之为数据集C 有时这两个变量中的观测值匹配,有时不同,有时一个变量中缺少观测值,但另一个变量中存在观测值 我想做的是合并这两个变量,这样“手术”就会覆盖“外科手术”中的任何内容,但是如果“手术”缺少一个观察,而“外科手术”有这个观察,那么“外科手术”观察就会保留在最后的合并列中 例如: Procedure S

我有两个数据集,它们来自不同的来源,但包含相似的变量。一个类似的变量是来自数据集A的“程序”和来自数据集B的“手术程序”

我已经将这两个数据集合并成一个巨大的数据集,我们称之为数据集C

有时这两个变量中的观测值匹配,有时不同,有时一个变量中缺少观测值,但另一个变量中存在观测值

我想做的是合并这两个变量,这样“手术”就会覆盖“外科手术”中的任何内容,但是如果“手术”缺少一个观察,而“外科手术”有这个观察,那么“外科手术”观察就会保留在最后的合并列中

例如:

Procedure          SurgicalProcedure
1                  total mastectomy
2                  segmental mastectomy
.                  MRM
5                  Seg. Mast with IOLM
7                  .
10                 total mast. w/ IOLM, SLNB
.                  Seg. Mast with IOLM, SLNB
3                  OLM, SLNB
预期结果:

Procedure
1
2
MRM
5
7
10
Seg. mast. w/ IOLM, SLNB
3
有人能帮我解决SAS的问题吗?如果不是SAS,那么R是可以的,甚至是Excel,但更喜欢SAS


谢谢

以下内容相当粗糙,但可能满足您的需要。它是粗糙的,因为它假设“外科手术”的价值总是你想要的。如果值不是您想要的值,则不会进行错误检查和警告

数据步骤“MergeAB”对数据集a和B执行“读取”。然后检查“过程”变量。如果缺少该值,则将其替换为“外科”变量的值。否则,将保留“procedure”变量的值。删除
drop
语句,您将能够更清楚地看到
MergeAB
数据步骤的工作方式。也就是说,替换行
data MergedAB(drop=procedure)仅与
数据合并

这将重新创建您描述的数据。
输入
语句中的
告诉SAS读取空格

/*Create dataset A*/
data A;
  length procedure $ 100;
  input procedure;

datalines;
1                 
2                 
.                 
5                 
7                 
10                
.                 
3                 
;
run;  



/*Create data set B*/
data B;
  length surgical $ 100;
  input surgical &;

datalines;
total mastectomy
segmental mastectomy
MRM
Seg. Mast with IOLM
.
total mast. w/ IOLM, SLNB
Seg. Mast with IOLM, SLNB
OLM, SLNB
;
run;
此步骤实际上执行合并:

/*Merge A and B*/
data MergedAB (drop = procedure surgical);
  set A;
  set B;

  if missing(procedure) then merged = surgical;
  else merged = procedure;
run;

我应该注意,我假设您的数据是字符类型的。但是,“过程”列可能是数字数据。如果是这种情况,您可能需要使用一个
PUT
来避免隐式类型转换。

从这里您只需要使用一个数据步骤。下面应该可以做到这一点:

data want;
drop procedure SurgicalProcedure;    
set have;
if procedure = . then char_procedure = put(SurgicalProcedure, 7.) ; 
else char_procedure = procedure;
run;

请注意,新变量是字符变量

如何“合并”文件?您没有显示任何可用于匹配观察值的id变量。您只是在寻找
coalescc()
函数吗?这太棒了!非常感谢你!你介意我再问你几个问题吗?以我目前的技术水平,我很难回答。我想我的问题有点复杂。我想我可以给你发个短信,但似乎没有这个选择。我只想把我的问题分开贴出来。