sas - 用另一个数据集突出显示相应的行号
问题描述
我有两个数据集,一个从 proc 单变量中提取极值。如果原始数据集中的n等于单变量数据集中提取的行号,我想创建一个新变量并将它们标记为 1 。但我不知道如何编程而不是手动输入行号。
</p>
解决方案
有几种方法可以做到这一点,但一种简单的方法是将 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;
推荐阅读
- java - 我无法在单独的方法中访问我的变量
- java - 是否可以添加一个 JLabel 数组,每个元素在 JLabel 内都有一个背景颜色
- c# - 实体框架:如何在不重新添加父级的情况下更新子级
- javascript - 用于 API 的 NODEJS Express 应用程序生成器
- javascript - 不使用反转功能反转数字
- python - 如何在 Python 中使用 Dict 创建多个组合列表
- php - PHP在浏览器中显示
- html - 响应式元素停止缩小并离开屏幕
- swift - 如何在 Swift 4 中将服务器 UTC 时间转换为本地时间?
- android - 访问联系人后如何在列表视图中选择多个值