我刚刚开始使用SAS而我正在尝试组合列。
我有表mainData
A1 A2 A3 A4
1 4 7 10
2 5 8 11
3 6 9 12
我想创建一个新表rearrangedData
Type Value
A1 1
A1 2
A1 3
A2 4
A2 5
A2 6
A3 7
A3 8
A3 9
A4 10
A4 11
A4 12
必须有一个简单的解决方案,我无法弄清楚这一点。我正在考虑编写do循环,但如果我不知道某个表的大小或特定列中的行数,该怎么办?我无法想象如何在SAS中获得此类信息。
答案 0 :(得分:1)
这种有点不寻常的转换可以通过转置和一些数组逻辑来完成:
data have;
input A1 A2 A3 A4;
cards;
1 4 7 10
2 5 8 11
3 6 9 12
;
run;
proc transpose data = have out = tr name=type prefix = r;
run;
data want;
set tr;
array r{*} r:;
do i = 1 to dim(r);
value = r[i];
output;
end;
drop i r:;
run;
此外,这样可以保留原始订单而无需排序。
答案 1 :(得分:0)
制作虚拟变量,然后转置数据。
data have;
set have;
id=_n_;
run;
proc transpose data=have out=temp;
by id;
var A1-A4;
run;
proc sort data=temp out=want(rename=(_name_=type col1=value) drop=id);
by _name_;
run;
答案 2 :(得分:0)
如果要保留原始顺序,则可以使用SET语句中的POINT =选项在每个变量(列)上循环数据集。
因此,这个数据集将读取第一个观察结果,只是为了定义变量。然后定义数组import java.awt.*;
import javax.swing.*;
class homework{
public static void main(String[] args) {
JFrame frame= new JFrame("border layout");
frame.setVisible(true);
JLabel label=new JLabel("Container of BorderLayout");
JButton button1 = new JButton("NORTH");
JButton button2 = new JButton("SOUTH");
JButton button3 = new JButton("EAST");
JButton button5 = new JButton("CENTER");
JButton button4 = new JButton("WEST");
JPanel panel1=new JPanel();
JPanel panel2=new JPanel();
frame.add(panel2);
label.setLayout(new FlowLayout(0));
panel2.add(label);
panel1.setLayout(new BorderLayout());
panel1.add(button1,BorderLayout.NORTH);
panel1.add(button2,BorderLayout.SOUTH);
panel1.add(button3,BorderLayout.EAST);
panel1.add(button4,BorderLayout.WEST);
panel1.add(button5,BorderLayout.CENTER);
frame.add(panel1);
frame.pack();
}
}
,以便我们可以使用VALUES
来知道列数。然后,它使用SET语句中的DIM(VALUES)
和POINT=
选项来控制另一个循环。它使用NOBS=
函数查找数组中当前变量的名称。
VNAME()