Formatting 有没有办法告诉SAS,对于任何obs,我想要格式化为春季、秋季和冬季?

Formatting 有没有办法告诉SAS,对于任何obs,我想要格式化为春季、秋季和冬季?,formatting,sas,Formatting,Sas,我对一个变量进行了1000次观察,如下所示: 19962 19943 19972 19951 19951 19912 前四位数字略有不同,但最后一位数字始终为1、2或3。有没有一种方法可以只格式化最后一个数字,而不必在value语句中键入前四个数字的每次迭代 也就是说,我希望避免这样做: proc format; value varfmt 19911 = '1991 Spring' 19912 = '1991 Fall' 19913 = '1991 Winter' 19921

我对一个变量进行了1000次观察,如下所示:

19962
19943
19972
19951
19951
19912
前四位数字略有不同,但最后一位数字始终为1、2或3。有没有一种方法可以只格式化最后一个数字,而不必在
value
语句中键入前四个数字的每次迭代

也就是说,我希望避免这样做:

proc format;
value varfmt 
  19911 = '1991 Spring'
  19912 = '1991 Fall'
  19913 = '1991 Winter'
  19921 = '
  19922 = '
  […]
  19991 = '1999 Spring'
  19992 = '1999 Fall'
  19993 = '
  ;
run;
取而代之的是,有某种方式告诉SAS,有什么办法来告诉SAS,有什么办法来代替,有什么办法来告诉SAS,有什么办法来告诉SAS,有什么办法来告诉SAS,有什么办法,有什么办法来告诉SAS,有什么办法来告诉任何<码>35周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五
value
语句下面哪三行


提前感谢您的帮助。

由于您仅在最后一位数字上应用格式,因此不需要使用proc格式中的所有数字。只需提取最后一位数字并应用格式,然后将其与其他前四位数字连接起来

创建示例数据集

data test;
infile datalines;
input year;
datalines;
19962
19943
19972
19951
19951
19912
;
run;
创建格式

proc format;
value $varfmt
1 = 'Spring'
2 = 'Fall'
3 = 'Winter'
;
run;
在这里,做下面的事情

  • 提取最后一个数字
  • 应用上面创建的格式
  • 提取数字的前四位数字
  • 连接2和3的输出


  • 如果确实需要整个值的格式,还可以选择从数据集创建格式。您必须创建所有可能的行,但这并不特别困难

    data forfmt;
      fmtname='SEASONF';
      length start $5 label $8;
      do startyr = 1990 to 2015;
        start=cats(startyr,'1');
        label=catx(' ',startyr,'Spring');
        output;
        start=cats(startyr,'2');
        label=catx(' ',startyr,'Fall');
        output;
        start=cats(startyr,'3');
        label=catx(' ',startyr,'Winter');
        output;
      end;
    run;
    
    proc format cntlin=forfmt;
    quit;
    

    这太棒了。谢谢你的解释!非常有趣。谢谢。这也是使用PROC FCMP和定义自定义函数的好地方。
    data forfmt;
      fmtname='SEASONF';
      length start $5 label $8;
      do startyr = 1990 to 2015;
        start=cats(startyr,'1');
        label=catx(' ',startyr,'Spring');
        output;
        start=cats(startyr,'2');
        label=catx(' ',startyr,'Fall');
        output;
        start=cats(startyr,'3');
        label=catx(' ',startyr,'Winter');
        output;
      end;
    run;
    
    proc format cntlin=forfmt;
    quit;