SAS:将varlist传递给sas宏

时间:2016-04-12 22:12:39

标签: macros sas

除了SUM之外,SAS确实缺少行功能。我想计算纵向数据集波形中的某些扩展缺失代码。

我可以使用数组来处理每个wave的硬编码varlist,但我没有运气制作一个我可以为每个wave调用的宏。问题似乎无法传递varlist,特别是如果使用第一个 - 最后一个表示法。

{
  "compilerOptions": {
    "target": "es5",
    "module": "system",
    "moduleResolution": "node", // <----------
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": false,
    "noImplicitAny": false
  },
  "exclude": [
    "node_modules",
    "typings/main",
    "typings/main.d.ts"
  ]
}

3 个答案:

答案 0 :(得分:1)

为什么需要宏?为什么不使用多维数组。除非每一波中的问题数量不同?

missing w;
data have;
  input a b c d e f;
cards;
 1  2  3  4  5  6
 w  w  w  w  w  w
 3  4  5  w  w  w
;;;;

data want ;
  set have ;
  array wavevars (2,3) a--c d--f ;
  array wavecount (2) ;
  do i=1 to dim(wavecount);
    wavecount(i)=0;
    do j=1 to dim2(wavevars);
      wavecount(i)+.w = wavevars(i,j);
    end;
  end;
  drop i j ;
run;

答案 1 :(得分:1)

您还可以完全避免使用数组,方法是使用CATT()函数将值转换为连接的字符串,然后计算字符串中找到的W的数量,如:

343  data want;
344    input a b c d e f;
345    wave1count=countc(catt(of a--c),'W');
346    wave2count=countc(catt(of d--f),'W');
347    put _all_;
348  datalines;

a=1 b=2 c=3 d=4 e=5 f=6 wave1count=0 wave2count=0 _ERROR_=0 _N_=1
a=W b=W c=W d=W e=W f=W wave1count=3 wave2count=3 _ERROR_=0 _N_=2
a=3 b=4 c=5 d=W e=W f=W wave1count=0 wave2count=3 _ERROR_=0 _N_=3
NOTE: The data set WORK.WANT has 3 observations and 8 variables.

352  ;
353  run;

答案 2 :(得分:0)

尝试

wave1count = nmiss(of a--c);
wave2count = nmiss(of d--f);