楼主: dxystata
3481 12

如何产生新变量 [推广有奖]

版主

大师

34%

还不是VIP/贵宾

-

TA的文库  其他...

Software

中英文Ebook

R学习

威望
2
论坛币
182304 个
通用积分
15205.6031
学术水平
208 点
热心指数
271 点
信用等级
174 点
经验
291087 点
帖子
5375
精华
1
在线时间
13478 小时
注册时间
2006-6-21
最后登录
2024-4-25

初级学术勋章 初级热心勋章 中级热心勋章 初级信用勋章

100论坛币
  1. data aaa;
  2. label sbp1='第一次收缩压' sbp2='第二次收缩压' sbp3='第3次收缩压';
  3. input sbp1 sbp2 sbp3;
  4. cards;
  5. 120 118 119
  6. 118 138 120
  7. ;
  8. run;
复制代码
根据数据集aaa提取变量标签然后产生新变量value为:
第一次收缩压:120,第二次收缩压:118,第三次收缩压:119
第一次收缩压:118,第二次收缩压:138,第三次收缩压:120

注:变量可能为2个,3个或更多。希望程序能通用。
可以用macro实现。

关键词:新变量 Input label cards value 收缩压 通用 如何 程序

本帖被以下文库推荐

沙发
farmman60 发表于 2014-12-7 19:36:35 |只看作者 |坛友微信交流群
dxystata 发表于 2014-12-8 09:10
我需要的是value是两个观测!
  1. This is what you want?

  2. data want;
  3.   set aaa ;
  4.   array sbp sbp:;
  5.   length value $500;
  6.   do over sbp;
  7.     value=catx(',',value, catx(':',vlabel(sbp),sbp));
  8.   end;
  9.   keep value;
  10. run;
复制代码

使用道具

藤椅
Tigflanker 发表于 2014-12-7 21:01:09 |只看作者 |坛友微信交流群
  1. data bbb;
  2.   set aaa;
  3.   array sbp sbp1 - sbp3;
  4.   array sbpc $50 sbpc1 - sbpc3;

  5.   do over sbp;
  6.     sbpc = catx(':',vlabel(sbp),sbp);
  7.   end;
  8. run;
复制代码
变量名不同的话,请给出一定的规律。

银子我可能已经用不到了哈。
已有 1 人评分经验 学术水平 热心指数 收起 理由
dxystata + 100 + 2 + 5 观点有启发

总评分: 经验 + 100  学术水平 + 2  热心指数 + 5   查看全部评分

使用道具

板凳
teqel 发表于 2014-12-7 22:35:34 |只看作者 |坛友微信交流群
Tigflanker 发表于 2014-12-7 21:01
变量名不同的话,请给出一定的规律。

银子我可能已经用不到了哈。
学一招do over

使用道具

报纸
dxystata 发表于 2014-12-8 08:23:02 |只看作者 |坛友微信交流群
Tigflanker 发表于 2014-12-7 21:01
变量名不同的话,请给出一定的规律。

银子我可能已经用不到了哈。
我希望得到一个新变量,你的程序中是三个新变量。
注:变量可能为2个,3个或更多。希望程序能通用。可以用macro实现。

使用道具

地板
dxystata 发表于 2014-12-8 08:23:06 |只看作者 |坛友微信交流群
Tigflanker 发表于 2014-12-7 21:01
变量名不同的话,请给出一定的规律。

银子我可能已经用不到了哈。
我希望得到一个新变量,你的程序中是三个新变量。
注:变量可能为2个,3个或更多。希望程序能通用。可以用macro实现。

使用道具

7
bobguy 发表于 2014-12-8 08:34:25 |只看作者 |坛友微信交流群
    data aaa;
    label sbp1='No. 1' sbp2='No. 2' sbp3='No. 3';
    input sbp1 sbp2 sbp3;
    cards;
    120 118 119
    118 138 120
    ;
    run;

        data bbb;
          set aaa;
          array x(*) sbp1 sbp2 sbp3;
          do _I_=1 to dim ( x );
            value=x(_I_);
                desc=catt( vlabel(x(_I_) ), ' / N=', _N_);
                output;
          end;
          keep value desc;
        run;

        proc print;run;
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
Tigflanker + 5 + 3 + 3 + 3 观点有启发

总评分: 论坛币 + 5  学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

使用道具

8
dxystata 发表于 2014-12-8 08:38:28 |只看作者 |坛友微信交流群
bobguy 发表于 2014-12-8 08:34
data aaa;
    label sbp1='No. 1' sbp2='No. 2' sbp3='No. 3';
    input sbp1 sbp2 sbp3;
输出不对!

使用道具

9
farmman60 发表于 2014-12-8 09:02:36 |只看作者 |坛友微信交流群
  1. data aaa;
  2. label sbp1='first pressure' sbp2='second pressure' sbp3='third pressure';
  3. input sbp1 sbp2 sbp3;
  4. cards;
  5. 120 118 119
  6. 118 138 120
  7. ;
  8. run;


  9. data want;
  10.   set aaa end=last;
  11.   array sbp sbp:;
  12.   length value $500;
  13.   retain value;
  14.   do over sbp;
  15.     value=catx(',',value, catx(':',vlabel(sbp),sbp));
  16.   end;
  17.   if last;
  18.   keep value;
  19. run;
复制代码
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
Tigflanker + 5 + 3 + 3 + 3 观点有启发

总评分: 论坛币 + 5  学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

使用道具

10
dxystata 发表于 2014-12-8 09:10:18 |只看作者 |坛友微信交流群
farmman60 发表于 2014-12-8 09:02
我需要的是value是两个观测!

使用道具

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

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

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

GMT+8, 2024-4-26 17:45