sas - OPEN 中的 Where 子句查找唯一值
问题描述
我正在尝试编写一个宏,它将返回数据集中的观察数,带有一个选项“where”子句,它将返回满足该条件的观察数。
我一直在使用OPEN SAS 函数来执行此操作,例如以下示例:
%macro test(WHERE);
%let DSID = %sysfunc(open(sashelp.cars(where=(&WHERE)), i));
%let NOBS = %sysfunc(attrn(&DSID, NLOBSF) ); &NOBS
%let RC = %sysfunc(close(&DSID));
%mend test;
%put %test(WHERE=make='Audi');
问题:
是否有特定的WHERE
子句使它返回特定列的唯一值(例如 Make)?类似distinct
能力的东西PROC SQL
(我不能实际使用PROC SQL
,因为输出不再适用%put
?
解决方案
没有where
会返回唯一值的。
您可以使用该doSubL
功能在辅助会话中提交步骤代码。侧会话不会注册为调用提交流中的步骤。
例子:
%macro cars_distinct(var=);
%local list rc;
%let rc = %sysfunc(doSubL(%str(
proc sql noprint;
select distinct &var into :list separated by ' '
from sashelp.cars
quit;
)));
&list.
%mend;
%put %cars_distinct(var=make);
注意:与循环遍历不同的值列表时重复执行某些过程(或其他宏调用)相比,BY
或CLASS
处理通常是最佳实践。
推荐阅读
- spring-boot - Jhipster 后端部署到 AWS Beanstalk API 调用失败
- php - 通过按元素分组并按另一个过滤来复制 CSV 文件
- javascript - 在 Vue.js 中使用 @mouseover='' 时,我可以将悬停的元素作为参数传递给我的函数吗?
- javascript - 如何使用 PHP 或 Javascript 从我的本地主机下载文件
- jenkins - 如何在 Jenkins 流水线脚本中访问触发事件属性
- asp.net - 注册时用户角色的下拉列表
- ios - 设置 CKReference 未保存
- javascript - 打字稿路径别名在每个文件上都需要模块别名/注册
- gradle - 使用 Kotlin DSL 在单独的文件中配置插件
- c# - 如何使用 Magick.net 将 HttpPostedFile .heic 转换为 .jpg