SAS:过程表格中变量值的变更顺序

SAS:过程表格中变量值的变更顺序,sas,tabulate,Sas,Tabulate,我有以下样本数据: DATA offenders; INPUT id :$12. age :3. sex :$1. residenceStatus :$1.; INFORMAT id $12.; INFILE DATALINES DSD; DATALINES; 1,30,m,A 2,20,f,B 3,16,u,X 4,55,m,X 5,60,f,Y 6,20,f,A 7,34,m,B 8,63,m,X 9,23,m,X 10,19,f,A 11,56,f,A 12,25,u,X 13,31,u,

我有以下样本数据:

DATA offenders;
INPUT id :$12. age :3. sex :$1. residenceStatus :$1.;
INFORMAT id $12.;
INFILE DATALINES DSD;
DATALINES;
1,30,m,A
2,20,f,B
3,16,u,X
4,55,m,X
5,60,f,Y
6,20,f,A
7,34,m,B
8,63,m,X
9,23,m,X
10,19,f,A
11,56,f,A
12,25,u,X
13,31,u,A
14,24,f,B
15,27,m,A
16,20,m,B
17,21,u,A
18,43,f,A
19,44,u,A
20,41,m,B
;
RUN;

proc format;
 value agegrp 1-20 = '1-20'
              21-30 = '21-30'
              31-40 = '31-40'
              41-50 = '41-50'
              51-60 = '51-60'
              61-70 = '61-70';
 value $status 'A' = 'Status A'
                'B' = 'Status B'
                'X' = 'Status X'
                'Y' = 'Status Y';
run;

现在,我正在使用PROC TABLATE创建一个交叉表:

proc tabulate;
class age sex residenceStatus;
table sex="", (ALL residenceStatus="") * age="" /misstext="0";
format age agegrp. residenceStatus $status.;
run;
但是我如何在交叉表中更改特定变量的顺序呢

例如,在上面的示例中,列为:

   ALL            Status A       Status B       Status X       Status Y
   1-20 21-30 ... 1-20 21-30 ... 1-20 21-30 ... 1-20 21-30 ... 1-20 21-30 ...
f
m
u

如果我想要
所有状态X状态B状态A状态Y
怎么办?谢谢你的帮助

选项
preload fmt
用于强制对
变量的值进行特定的排序

更改自定义格式
$status
的定义,以指定
(未排序)
选项,并按所需的输出顺序列出映射。NOTSORTED告诉过程不要按开始值排序——这会影响格式的内部结构及其与其他过程的交互方式

然后在
表格
中,对于需要定义的特定顺序的
变量,指定选项
order=DATA preload fmt
。注意:默认顺序是按升序值格式化的

proc格式;
值$status(未排序)
“X”=“状态X”
“B”=“状态B”
“A”=“状态A”
“Y”=“状态Y”
;
跑
过程制表;

班级年龄性别;/* 选项
preload fmt
用于强制对
变量的值进行特定的排序

更改自定义格式
$status
的定义,以指定
(未排序)
选项,并按所需的输出顺序列出映射。NOTSORTED告诉过程不要按开始值排序——这会影响格式的内部结构及其与其他过程的交互方式

然后在
表格
中,对于需要定义的特定顺序的
变量,指定选项
order=DATA preload fmt
。注意:默认顺序是按升序值格式化的

proc格式;
值$status(未排序)
“X”=“状态X”
“B”=“状态B”
“A”=“状态A”
“Y”=“状态Y”
;
跑
过程制表;
班级年龄性别/*
proc format;
 value $status (notsorted)
  'X' = 'Status X'
  'B' = 'Status B'
  'A' = 'Status A'
  'Y' = 'Status Y'
 ;
run;

proc tabulate;

  class age sex;                                 /* <---- default ordering */
  class residenceStatus / preloadfmt order=data; /* <---- custom ordering  */

  table sex="", (ALL residenceStatus="") * age="" /misstext="0";
  format 
    age agegrp. 
    residenceStatus $status.                     /* <---- defined with (NOTSORTED) */
  ;     
run;