SAS在SAS宏中传递数组

时间:2017-05-02 17:16:18

标签: arrays macros sas

我尝试根据现有列进行一些计算,然后将结果添加回数据集。有人可以帮忙吗?

以下是我尝试在SAS中编写的内容:

import java.awt.event.*;
import javax.swing.*;
import javax.sound.sampled.*;
import java.net.URL;
import java.io.*;

class SoundTest {

  public static void main(String[] args) throws Exception {
    URL urlToSound = new URL("file:c:/java/gun1.wav");
//    URL urlToSound = new URL("file:c:/java/flyby1.wav");
    AudioInputStream ais = AudioSystem.getAudioInputStream(urlToSound);
    final Clip clip = AudioSystem.getClip();
    clip.open(ais);
    JButton button = new JButton("Bird Sounds");
    button.addActionListener( new ActionListener(){
        public void actionPerformed(ActionEvent ae) {
          clip.setFramePosition(0);
          clip.start();
        }
      } );
    JOptionPane.showMessageDialog(null, button);
  }
}

2 个答案:

答案 0 :(得分:0)

您无法嵌套数据步骤。一旦SAS看到新数据步骤启动,它就会停止编译第一个并运行它。另外,您的当前宏如何知道如何查找数据,因为数据步骤中没有SET语句?此外,您无法引用尚未创建的宏变量。因此,如果使用then CALL SYMPUTX()函数生成宏变量,则无法引用其值来修改当前数据步骤的代码,因为数据步骤需要在call symputx()可以执行之前编译。 / p>

这样的事情可行。

%macro ColumnCal1(m,prefix);
attr_&prefix. = sum(of &m.1-&m.3);
call symput("attr_&prefix.",attr_&prefix.);
%mend ColumnCal1;

data c2;
  set c1;
%ColumnCal1(m=mth, prefix=ttl);
run;

答案 1 :(得分:0)

如果我理解了问题,那么您有一个数据集,并且您希望使用宏来计算不同列的总和。我在下面分享了一个例子。试一试。
假设您有一个包含如下数组的数据集:

data have;
array mnth{*} m1-m4;
input mnth{*};
cards;
1 3 6 9
2 4 8 10
;
run;

<强>代码: 为了计算不同列的总和,使用参数
来创建宏columncal1 1)输入:包含变量
的输入文件 2)开始:需要计算总和的第一列
3)结束:最后一列,直到需要计算总和为止 4)前缀:计算列名的前缀
5)输出:输出文件,给出结果

%macro ColumnCal1(input=,start=,end=,prefix=,output=);
data &output.;
set &input.;
attr_&prefix = sum(of &start.-&end.);
run;
%mend ColumnCal1;

%ColumnCal1(input=have,start=m1,end=m2,prefix=ttl,output=want1);   
/* Dataset want1 having all the initial columns plus sum of m1 and m2 stored in a variable attr_ttl has been created from have dataset*/

%ColumnCal1(input=want1,start=m2,end=m3,prefix=ttl1,output=want2);  
/* Dataset want2 having all the initial columns plus sum of m1 and m2 stored in a variable attr_ttl has been created from want1 dataset*/

我的输出(want2):

m1  |m2 |m3 |m4 |attr_ttl |attr_ttl1
1   |3  |6  |9  |4        |9
2   |4  |8  |10 |6        |12

如果您有任何不同的要求,请告诉我。