sas - 从数据库 (SAS) 中删除以值列表开头的所有观察值
问题描述
我正在尝试找到优化的方法来做到这一点:
我想从字符变量中删除所有以不同可能字符串开头的观察结果,例如:
“小计”“包括:”因此,如果它以这些值中的任何一个(或我没有在这里写的许多其他值)开头,则将它们从数据集中删除。
最好的解决方案是包含所有值的宏变量,但我不知道如何处理它。(%let list = Subtotal 包括:但当它们是值时将它们计为变量)
我这样做了:
数据一;设置 b ; 如果 findw(product,"Subtotal") 则删除;如果 findw(product,"Including:") 则删除;…………
将不胜感激任何建议!谢谢
解决方案
首先弄清楚你想要什么SAS代码。然后你就可以开始担心如何使用宏逻辑或宏变量了。
你只是排除以值开头的字符串吗?
data want ;
set have ;
where product not in: ("Subtotal" "Including");
run;
还是您想根据字符串变量中的第一个“单词”进行子集化?
where scan(product,1) not in ("Subtotal" "Including");
或者也许不区分大小写?
where lowcase(scan(product,1)) not in ("subtotal" "including");
现在,如果值列表足够小(小于 64K 字节),那么您可以将列表放入宏变量中。
%let list="Subtotal" "Including";
然后稍后使用宏变量生成 WHERE 语句。
where product not in: (&list);
您甚至可以从前缀值数据集生成宏变量。
proc sql noprint;
select quote(trim(prefix)) into :list separated by ' '
from prefixes
;
quit;
推荐阅读
- android - 小型 SVG 图像视图看起来模糊或“弯曲”
- dart - 当方法被覆盖时如何在 Dart 中确定?
- python - 从 txt 文件中获取字符串、变量并在主脚本中使用
- google-sheets - 如何在 Google 表格中的两个数据集中打出 1-100 分?
- oracle - ODBC 数据源连接成功但 TNS 在 VBScript 中未解析
- android - 为什么我的 java 代码在 Android Studio 3.3 中看起来像 Kotlin
- visual-studio - Visual Studio - 如何将*更改*保存到当前自定义窗口布局?
- jquery - Google Analytics 链接器装饰语法
- javascript - 如何检测添加
- 在 DOM 中使用 JavaScript 中的 MutationObserver 标记并在 IFRAME 中获取数据文件名?
- node.js - nodejs http请求是否有最大响应大小,我该如何增加它?