proc sort排序,基本格式:
proc sort data=<dataset> (out=<newset>);
by (descending) <varname1> (descending) <varname2>……;
run;
proc sort过程将数据集dataset按照varname的值进行升序或者降序,输出为数据集newset;
by语句是指按照varname1进行排序,值相同时按照varname2进行排序,以此类推;
descending即降序排列,默认ascending升序;
proc transpose转置
长表转宽表,基本格式
proc transpose data=<dataset> (out=<newset> name=<name> label=<label>);
by <by1> <by2>……;
var <var>;
id <id>;
idlabel <idlabel>;
run;
name:用来定义var的新变量 的变量名(显示在表格中);
label:用来定义var的标签的新变量 的变量名(显示在表格中);
id:即取id中的值 生成新的变量(显示在表格中);
idlabel:即取idlabel中的值 生成新变量的标签(不显示在表格中);
var:var的值作为 id中的值生成新变量 的值(显示在表格中)
by:被保留的变量,控制变量的先后顺序,变量需要提前被sort,notsorted 指允许不排序;
/*长表vs转宽表vsa */
proc sort data=vs;
by subjid avisit avisitn;
run;
proc transpose data=vs out=vsa name=a label=b;
/*out指定输出数据集,若无指定,自动将转制后的数据集命名为data1、data2...不会覆盖原有数据集*/
/*name,label 存储 var 变量值的变量名和标签*/
by subjid avisit avisitn; /*仍然需要保留为变量,包含在转置数据集中,但他们本身并不转置*/
var aval; /*需要转置其值的变量 <var>的变量值会成为Id语句生成的新变量的值; 在转置后的数据集中作为值的变量*/
id paramcd; /*ID变量的值会变成新变量名;转置后按照值生成多个变量的变量*/
idlabel param; /*idlabel变量的值会变成新变量的标签*/
run;
宽表转长表,基本格式
proc transpose data=<dataset> out=<newset> prefix=<prefix> name=<name> label=<label>);
by <by1> <by2>……;
var <var1> <var2>……;
run;
prefix:为var1、var2的值指定新的变量名前缀;
name:为存储var1、var2变量名的新变量;
by:by1、by2变量可复制成多条观测,需要提前sort(注意,sort的by语句的变量是哪些,此处的变量就是哪些);
var:var1、var2指定需要转变的变量名
/*宽表vs1转长表*vsb/
proc sort data=vs1;
by subjid avisitn avisit;
run;
proc transpose data=vs1 out=vsb /*prefix=st*/ name=param label=paramcd; /*Name: <name>为存储<var1> <var2>变量名的新变量*/
by subjid avisitn avisit;
var weight height; /*由变量变为观测值,其变量下的值转置,由宽转长*/
run;