我尝试根据现有列进行一些计算,然后将结果添加回数据集。有人可以帮忙吗?
以下是我尝试在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);
}
}
答案 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
如果您有任何不同的要求,请告诉我。