SAS如果在PROC SORT之前有条件

时间:2016-11-24 03:28:57

标签: sorting if-statement sas

@Override
public String toString(){
   return this.firstName + " " + this.lastName + " " + this.age;
}

我正在尝试在proc排序语句之前附加条件语句,但是我无法让IF在数据步骤之外工作。有什么方法可以解决这个问题吗?

基本上我不想对任何test_& var进行排序。包含时间变量的数据集,因为它们是我想要保留特定序列的唯一数据集。

1 个答案:

答案 0 :(得分:3)

这是一个宏观示例:

/* tell macro language to recognise the in operator */
options minoperator;

/* demo data */
data test_yymm; column1=1;run;
data test_quarter; column1=1;run;

%macro demo(var) ;
/* remove quotes, place not outside the condition */
%if not (&var in quarter period year) %then %do;
    proc sort data=test_&var.;
        by descending column1;
    run;
%end;
%mend;

/* call macro */
%demo(yymm);
%demo(quarter);

您也可以通过调用call execute

在数据步骤中实现此目的
%let var=yymm;
data _null_;
  if "&var" not in ('quarter' 'period' 'year') then do;
    call execute("
      proc sort data=test_&var.;
        by descending column1;
      run;
    ");
  end;
run;

请记住,SAS宏语言是基于文本的,因此不需要引用变量。与常规SAS代码不同,其中需要引用字符串文字以便被识别为..