全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1625 4
2011-12-02
现有名为SIC的几千个代码,sample 如下:
SIC
4920
6710
6020
6020
3714.
.
.
并且有另一文件定义了不同种类的范围,文件数据如下:
"1"     0100-0999
          2000-2399
          2700-2749
          2770-2799
          3100-3199
          3940-3989

"2"     2500-2519
          2590-2599
          3630-3659
          3710-3711
          3714-3714
          3716-3716
          3750-3751
          3792-3792
          3900-3939
          3990-3999

"3"     2520-2589
          2600-2699
          2750-2769
          3000-3099
          3200-3569
          3580-3629
          3700-3709
          3712-3713
          3715-3715
          3717-3749
          3752-3791
          3793-3799
          3830-3839
          3860-3899
"4"     1200-1399
          2900-2999
"5"     2800-2829
          2840-2899
"6"     4900-4949
"7"     6000-6999
.
等一共12个种类。现想另作一列“category”, 把SIC代码分类到相对应的种类里:如下所示
SIC              category
4920               6
6710               7
6020               7
6020               7
3714               2
.
.
例如SIC 4940 对应的种类是“6” ,6710对应的种类是"7" 以此类推. 不确定用什么代码来编写。想着是否用if then语句来赋值,但由于种类的范围太多 如果用if SIC <= ” “then  category = ” “ 之类的代码来写是不是太麻烦了。请教高手们有没有什么方法来达到这个分类的目的呢?万分感谢!!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2011-12-2 10:51:30
FORMAT做,前期FMT的生成代码视对应规则的原数据复杂程度做对应修改。包括SIC的变量类型之类的......
复制代码
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-12-2 11:20:38
复制代码
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-12-2 12:43:01
This is a good example to use a SAS format making a lookup table. See example below.

data t1;
length cat2 $3 sic $9;
retain cat;
infile cards;
input cat2 1-6 sic 7-20;
if cat2 ne  ' ' then cat=compress(cat2,'"');
if sic ne ' ' then output;
cards;
"1"       0100-0999
          2000-2399
          2700-2749
          2770-2799
          3100-3199
          3940-3989

"2"       2500-2519
          2590-2599
          3630-3659
          3710-3711
          3714-3714
          3716-3716
          3750-3751
          3792-3792
          3900-3939
          3990-3999

"3"       2520-2589
          2600-2699
          2750-2769
          3000-3099
          3200-3569
          3580-3629
          3700-3709
          3712-3713
          3715-3715
          3717-3749
          3752-3791
          3793-3799
          3830-3839
          3860-3899
"4"       1200-1399
          2900-2999
"5"       2800-2829
          2840-2899
"6"       4900-4949
"7"       6000-6999
;

proc print;run;

data _null_;
  set t1 END=END;
  if _n_=1 then call execute('PROC FORMAT LIBRARY=WORK; VALUE SIC2CAT');
  call execute(SIC||'='||CAT);
  IF END THEN call execute(';RUN;');
RUN;

DATA NEED;
INPUT SIC ;
category=PUT(SIC,SIC2CAT.);
CARDS;
4920              
6710              
6020              
6020              
3714              
;

PROC PRINT;RUN;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-12-2 13:30:07
非常感谢楼上三位的解答 越来越觉得sas学好了真的挺有用的!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群