在SAS中组合列

时间:2015-10-19 17:09:24

标签: sas

我刚刚开始使用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中获得此类信息。

3 个答案:

答案 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()