我需要对学年进行降序排序。由于这不是数字变量,我决定使用 preloadfmt 来确保表遵循此格式 ->
但是,preloadfmt 不起作用,并且日志中没有显示任何警告或错误。我在日志中看到的唯一内容是:“注意:格式 $LOADE 已在库 WORK.FORMATS 中。 注意:格式$LOADE已输出。" 我不认为这有什么关系。
我通过下面的代码得到了这个结果 知道如何才能得到理想的结果吗?
/*This is the code I'm using:*/
proc format;
value $LOADE
'FT' = 'FT'
'PT' = 'PT';
value $LEVEL
'First time Freshmen' = '1st'
'Other Freshmen' = '1st'
'Sophomores' = '2nd'
'Juniors' = '3rd'
'Seniors' = '4rd';
value $Academic
'2023-24'='2023-24'
'2022-23'='2022-23'
'2021-22'='2021-22'
'2020-21'='2020-21'
'2019-20'='2019-20';
run;
proc tabulate data=step3;
TITLE1 "Hisotircal Enrollment by load and level";
where pmajr='SYST';
class Academic_Year load level_description / preloadfmt;
Table (Academic_Year*load), level_description all=total/ printmiss misstext='0';*/ norow nocol nopercent nocum;
format load $loade. Academic_Year $Academic. level_description $level.;
run;
在 PROC FORMAT VALUE 语句中使用选项
NOTSORTED
ORDER=FORMATTED
代码中的两种格式可以删除,因为它们是多余的并且不执行任何转换。
示例:
data have (label='All students were harmed in making this fake data') ;
call streaminit(2024) ;
do academYear = '2023-24', '2022-23', '2021-22', '2020-21' ;
do enrollYear = 'Frosh', 'Soph', 'Jr', 'Sr' ;
do _n_ = 1 to rand('integer', 500,750) ;
load = ifc (rand('uniform') < 0.33, 'PT', 'FT') ;
OUTPUT ;
end ;
end ; end ;
run ;
proc format ;
value $eYear (notsorted)
'Frosh' = '1st'
'Soph' = '2nd'
'Jr' = '3rd'
'Sr' = '4th'
;
run ;
ods html file='report.html' style=plateau ;
title 'Raw' ;
proc tabulate data=have ;
class academYear enrollYear load ;
table academYear*load,enrollYear ;
run ;
title '(NOTSORTED) -- ORDER=FORMATTED, PRELOADFMT and PRINTMISS' ;
proc tabulate data=have ;
class academYear enrollYear load / order=formatted preloadfmt ;
table academYear*load,enrollYear / printmiss ;
format enrollYear $eYear. ;
run ;
ods html close ;