【问题标题】:Filter data based on macro variable values in SAS根据 SAS 中的宏变量值过滤数据
【发布时间】:2018-02-01 18:09:52
【问题描述】:
%let var_list = n1 n2 n3;

data A;
call streaminit(123);       /* set random number seed */
do i = 1 to 100;
   n1 = rand("Normal");
   n2 = rand("Normal");
   n3 = rand("Normal");
   output;
end;
run;

假设我要根据宏变量“&var_list”过滤一个数据集,过滤宏变量中每个值都大于0的所有数据。 宏应该怎么写?

感谢您的帮助!

【问题讨论】:

  • '宏变量中的每个值都大于0',你的意思是数据集中的每个变量都大于0吗?您的宏变量是字符。为什么要宏?数组是一种更好的方法,您想要什么作为输出。如果 N10,那条记录会被删除吗?
  • 天哪,我怀念marco 的日子。您能否使用实际值重述问题,显示数据集拥有,然后显示您想要的。然后显示您使用过或试图从中获取的非宏观纯 SAS 代码。只有到那时,谈论马可才是现实的或愚蠢的。
  • 您的意思是要查找 N1、N2 和 N3 均为正数的记录吗? if n(of n1 n2 n3)=3 and min(of n1 n2 n3)>0;

标签: macros sas


【解决方案1】:

您的意思是要查找 N1、N2 和 N3 均为正数的记录吗?

data want ;
  set have ;
  if nmiss(of n1 n2 n3)=0 and min(of n1 n2 n3)>0; 
run;

转换为使用宏变量。

%let varlist=n1 n2 n3;
data want ;
  set have ;
  if nmiss(of &varlist)=0 and min(of &varlist)>0; 
run;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-05
    • 1970-01-01
    • 1970-01-01
    • 2021-01-21
    • 1970-01-01
    • 2011-11-21
    相关资源
    最近更新 更多