请选择 进入手机版 | 继续访问电脑版
楼主: priss111
2077 8

请问: 如何不显示年龄组但能使年龄组(岁)按照年龄组的顺序排序?谢谢! [推广有奖]

  • 0关注
  • 5粉丝

副教授

15%

还不是VIP/贵宾

-

威望
0
论坛币
153 个
通用积分
47.5396
学术水平
11 点
热心指数
14 点
信用等级
10 点
经验
14938 点
帖子
473
精华
0
在线时间
805 小时
注册时间
2008-3-30
最后登录
2024-4-12

priss111 发表于 2016-10-10 11:03:53 |显示全部楼层 |坛友微信交流群
相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
  1. **请问:proc means的输出中: 如何不显示年龄组但能使年龄组(岁)按照年龄组的顺序排序?谢谢!;

  2. data xsbhg2(keep=id county school grade sex nation birth date age age1 age2 weight height1 height2 sclname bmi);
  3.         set xsbhg1;
  4.    
  5.                 length age1 3;
  6.                 length age2 $ 4;
  7.                 format age best4.1;
  8.                 format age1 best2.;
  9.                 format age2 $4.;
  10.         age=round((date-birth)/365.25,0.1);   *date=调查日期,birth=出生日期;

  11.         if age^=. and age<=5 then delete;

  12.         if 6<=age<7 then age1=6;
  13.         else if 7<=age<8 then age1=7;
  14.         else if 8<=age<9 then age1=8;
  15.         else if 9<=age<10 then age1=9;
  16.         else if 10<=age<11 then age1=10;
  17.         else if 11<=age<12 then age1=11;
  18.         else if 12<=age<13 then age1=12;
  19.         else if 13<=age<14 then age1=13;
  20.         else if 14<=age<15 then age1=14;
  21.         else if 15<=age<16 then age1=15;
  22.         else if 16<=age<17 then age1=16;
  23.         else if 17<=age<18 then age1=17;
  24.         else if 18<=age<19 then age1=18;
  25.         else if 19<=age<20 then age1=19;
  26.         else if 20<=age<21 then age1=20;
  27.         else if 21<=age<22 then age1=21;
  28.         else if 22<=age<23 then age1=22;

  29.         if 6<=age<7 then age2="6-";
  30.         else if 7<=age<8 then age2="7-";
  31.         else if 8<=age<9 then age2="8-";
  32.         else if 9<=age<10 then age2="9-";
  33.         else if 10<=age<11 then age2="10-";
  34.         else if 11<=age<12 then age2="11-";
  35.         else if 12<=age<13 then age2="12-";
  36.         else if 13<=age<14 then age2="13-";
  37.         else if 14<=age<15 then age2="14-";
  38.         else if 15<=age<16 then age2="15-";
  39.         else if 16<=age<17 then age2="16-";
  40.         else if 17<=age<18 then age2="17-";
  41.         else if 18<=age<19 then age2="18-";
  42.         else if 19<=age<20 then age2="19-";
  43.         else if 20<=age<21 then age2="20-";
  44.         else if 21<=age<22 then age2="21-";
  45.         else if 22<=age<23 then age2="22-";

  46.         bmi=weight/((height2/100)*(height2/100));  *bmi=体重指数;

  47.         label height2="身高(cm)"
  48.                  sex="性别"
  49.                 age1="年龄组"
  50.                 age2="年龄组(岁)"
  51.                 bmi="体质指数";
  52.         run;

  53. proc means data=xsbhg2 n min max mean std median qrange;
  54.         *format age1 $age_.;
  55.         class sex age1 age2;
  56.         var height2 weight bmi;
  57.         output out=agehw;
  58.         run;
复制代码

二维码

扫码加我 拉你入群

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

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

关键词:年龄组 不显示 format length Nation county nation school

proc means_Q

proc means_Q

回帖推荐

wang1839 发表于8楼  查看完整内容

llulla 发表于 2016-10-10 22:41:44 |显示全部楼层 |坛友微信交流群
不清楚你的问题是不想变量“年龄组”的数值?即移除整个一列。或者只是将年龄组不显示,而保留它数值。
若是第一个问题,可以按年龄组排序后,drop 年龄组。若是第二个问题,可以采用label功能显示你要显示的格式。

使用道具

priss111 发表于 2016-10-11 14:25:23 |显示全部楼层 |坛友微信交流群
llulla 发表于 2016-10-10 22:41
不清楚你的问题是不想变量“年龄组”的数值?即移除整个一列。或者只是将年龄组不显示,而保留它数值。
若 ...
谢谢热情回复.

都不完全是你所理解的.

我的目的是:按照“年龄组(岁)”(字符型)的顺序即“6-”、“7-”、“8-”、"9-"、“10-”、“11-”... "18-"来显示身高、体重等的n min max mean std 等;

之所以在proc means中保留“年龄组”(数值型),目的只是为了让“年龄组(岁)”按照阿拉伯数字的顺序排序。

使用道具

wang1839 在职认证  发表于 2016-10-11 16:37:38 |显示全部楼层 |坛友微信交流群
proc means  后 BY age1

使用道具

wang1839 在职认证  发表于 2016-10-11 16:49:19 |显示全部楼层 |坛友微信交流群
代码过于繁琐,用这个试试
  1. %macro con;
  2. %do i=6 %to 23;
  3. if  &i<=age<&i+1 then do;
  4. age1=&i;
  5. agec="-"||put(&i,8. -l);
  6. end;
  7. %end;
  8. %mend;
复制代码
A man who is frustrated will never stand up.

使用道具

priss111 发表于 2016-10-12 09:06:14 |显示全部楼层 |坛友微信交流群
wang1839 发表于 2016-10-11 16:37
proc means  后 BY age1
谢谢。不能实现。

proc means data=lnhw1 n min max mean std median qrange maxdec=1;
133      by age1;
134      class sex age1 age2;
135      var height;
136      run;

NOTE: 正在写入 HTML Body(主体)文件: sashtml.htm
ERROR: 数据集 WORK.LNHW1 不是以“升序”顺序排序的。当前 BY 组中“年龄组=10”,下一个 BY
组中“年龄组=9”。

使用道具

priss111 发表于 2016-10-12 09:13:57 |显示全部楼层 |坛友微信交流群
wang1839 发表于 2016-10-11 16:49
代码过于繁琐,用这个试试
谢谢。

%macro con; 写的确实精炼,赞。

但是不知%macro con 怎么能够替换age1 与 age2?

我通过以下步骤均不能实现;
1、在xsbhg2中将age1 & age2的if- else if 删除;
2、运行%macro con;
或者直接将%macro con替换1、也不行。

使用道具

wang1839 在职认证  发表于 2016-10-12 10:15:51 |显示全部楼层 |坛友微信交流群
  1. data xsbhg2;
  2. input subject $ age  height weight;
  3. cards;
  4. 1001   23    175   64
  5. 1002   21    170   60
  6. 1003   20    168   61
  7. ;
  8. run;

  9. %macro con;
  10. %do i=6 %to 23;
  11. if  &i<=age<&i+1 then do;
  12. age1=&i;
  13. agec="-"||put(&i,8. -l);
  14. end;
  15. %end;
  16. %mend;



  17. data bmi;
  18.         set xsbhg2;
  19.         bmi=weight/((height/100)**2);
  20.         %con;
  21.         order=1;
  22.         var=height;
  23.         output;
  24.         order=2;
  25.         var=weight;
  26.         output;
  27.         order=3;
  28.         var=bmi;
  29.         output;
  30.         keep age agec var order;
  31. run;


  32. proc sort data=bmi;
  33.         by order;
  34. run;

  35. proc means data=bmi maxdec=1 n min max mean std median qrange ;
  36. by order;
  37. class  age agec;
  38. var var;
  39. output out=result(where=(age>. & agec>"")) n=v1 min=v2 max=v3 mean=v4  std=v5  median=v6  qrange=v7;
  40. run;

  41. proc transpose data=result out=temp prefix=res;
  42.         by order age agec;
  43.         var v1-v7;
  44. run;

  45. data final;
  46.         set temp;
  47.         length col1 $10;
  48.         select(order);
  49.         when(1) col0="Height(cm)";when(2) col0="Weight(kg)";when(3) col0="BMI(kg/m2)";
  50.         otherwise;end;
  51.         select(_name_);
  52.         when("v1") col1="N";when("v2") col1="Min";when("v3") col1="Max";when("v4") col1="Mean";
  53.         when("v5") col1="Std";when("v6") col1="Median";when("v7") col1="Qrange";otherwise;end;
  54.         seq=input(compress(_name_,'v'),best.);
  55.         keep order age agec col0-col1 res1;
  56. run;
复制代码
A man who is frustrated will never stand up.

使用道具

priss111 发表于 2016-10-12 12:21:11 |显示全部楼层 |坛友微信交流群
wang1839 发表于 2016-10-12 10:15
谢谢!

这思路很流畅,
赞。

我对宏变量的具体用法不熟,
需要日后多学习。

暂时还不能将您这段code具体嵌入我的code中,
特别是data final这步。

备注:这个数据集是很多excel表合并而成(变量格式与取值都乱,日期的格式更是乱极了:有些必须手动调整,不然age会缺失),
在进行proc means之前需要调整很多格式,
所以暂先不能将您这code嵌入(因为有太多变量名需要更改)。

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-19 09:56