将“ where”条件从SAS转换为R

RHelp

我有一个需要转换为R的SAS宏,由于我不熟悉SAS,因此在理解代码的一部分时遇到了一些麻烦。

在宏的开头,我有这行定义了宏-

%MACRO macroname(sdate=01JAN2011,edate=01JAN2013, FILTERS=platform in (1,2,3),OUT=data_final)

%if %length(&filters) > 2 %then %let filters = and &filters; 
%else %let filters = %str( );

在宏的其中一个阶段中,我有以下命令-

proc sort data = A noduplicates;
  where 1 &filters;
  by id, date;
  run;

我知道在where条件下,将应用过滤条件。但是1的作用是什么?同样,过滤器列上的if else条件会做什么?

谢谢!

艾伦·鲍(Allan Bowe)

也可以将其写为1 = 1,本质上是静态的TRUE条件。

这实际上是一个巧妙的小技巧,解决了添加多个where子句(作为宏变量)的问题。每个条件都必须由运算符(AND / OR,通常为AND)分隔,但是并不总是知道您要添加的条件之前是否有其他条件例如,您可能希望灵活地&filter在claueses的这两个位置中添加相同的内容:

where x=1 &filter;

where &filter;

当然,第一个示例必须解决,x=1 AND some=filter;第二个必须解决where AND some=filter;

请记住,where子句中的任何条件最终都会解析为true或false。通过加“1”,我们有一个静态的“真”条件,即对查询没有影响,但确实给我们的灵活性(和可读性)代码(基本上避免了更宏观%,如果%其他语句),如果我们总是在前面加上“ AND”到&filter。

where 1 &filter  

代替

where %if %length(&filter)>4 and "%substr(%upcase(&filter))" ne AND %then %do;
   where 1 and &filter
%end;
%else %do;
   where &filter
%end;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将“ where”条件从SAS转换为R

来自分类Dev

将SAS代码转换为R代码

来自分类Dev

将IF条件从Excel转换为R

来自分类Dev

将重复测量的混合模型从SAS转换为R

来自分类Dev

是否可以将SAS infile语句转换为R代码?

来自分类Dev

将sas if-else语句转换为R

来自分类Dev

将 MySQL 查询(带 where 条件)转换为 Elasticsearch 查询

来自分类Dev

将SAS数字转换为python datetime

来自分类Dev

将EXCEL代码转换为SAS

来自分类Dev

SAS将字符/数字转换为数字

来自分类Dev

将分数转换为R

来自分类Dev

将'%/%'从R转换为MATLAB

来自分类Dev

将Rails 4 has_many从proc条件转换为where

来自分类Dev

将C中的IF条件转换为MIPS

来自分类Dev

将MySQL查询转换为cakephp条件

来自分类Dev

条件格式-将AhK转换为A♥K♠

来自分类Dev

将复杂的条件从 C 转换为 Fortran

来自分类Dev

将条件转换为数字 0 1

来自分类Dev

将 sql 转换为休眠条件

来自分类Dev

将条件语句转换为线性约束

来自分类Dev

将WHERE转换为JOIN语句

来自分类Dev

将数字sas日期转换为熊猫中的datetime

来自分类Dev

将SAS数字日期转换为日期时间格式

来自分类Dev

使用proc SQL将时间从字符转换为数字-SAS

来自分类Dev

将大型SAS数据集转换为hdf5

来自分类Dev

将SAS数据列转换为Macro变量?

来自分类Dev

将SAS proc sql转换为Python(pandas)

来自分类Dev

将大型SAS数据集转换为hdf5

来自分类Dev

按列将SAS数据集转换为相对频率