首页 > 解决方案 > 用另一个数据集突出显示相应的行号

问题描述

我有两个数据集,一个从 proc 单变量中提取极值。如果原始数据集中的n等于单变量数据集中提取的行号,我想创建一个新变量并将它们标记为 1 。但我不知道如何编程而不是手动输入行号。 在此处输入图像描述

 </p>

标签: sas

解决方案


有几种方法可以做到这一点,但一种简单的方法是将 rownum 添加到原始数据集并在其上合并。

这是一个例子。

ods output extremeobs=extreme_test;
proc univariate data=sashelp.heart;
run;
ods output close;

data extreme_diastolic extreme_systolic;  *just creating the extreme datasets;
  set extreme_test;
  if varname='Diastolic' then output extreme_diastolic;
  else if varname='Systolic' then output extreme_systolic;
run;

data for_merge;    *adding rownum on to the original dataset;
  set sashelp.heart;
  rownum = _n_;
run;


*now, sort the extreme datasets by the `highobs` and `lowobs` values respectively and save those as `rownum`, so they can be merged;

proc sort data=extreme_diastolic out=high_diastolic(keep=highobs rename=highobs=rownum); 
  by highobs;
run;

proc sort data=extreme_systolic out=high_systolic(keep=highobs rename=highobs=rownum);
  by highobs;
run;

proc sort data=extreme_diastolic out=low_diastolic(keep=lowobs rename=lowobs=rownum); 
  by lowobs;
run;

proc sort data=extreme_systolic out=low_systolic(keep=lowobs rename=lowobs=rownum);
  by lowobs;
run;

*now, merge those on using `in=` to identify which are matches.;

data heart_extremes;
  merge for_merge high_diastolic(in=_highd) high_systolic(in=_highs) low_diastolic(in=_lowd) low_systolic(in=_lows);
  by rownum;
  if _highd then high_diastolic = 1;
  if _highs then high_systolic = 1;
  if _lowd then low_diastolic = 1;
  if _lows then low_systolic = 1;
run;

推荐阅读