楼主: dkyyy
10973 7

[问答] SAS生成新变量的问题 [推广有奖]

  • 2关注
  • 0粉丝

本科生

82%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0.0243
学术水平
6 点
热心指数
7 点
信用等级
6 点
经验
977 点
帖子
42
精华
0
在线时间
159 小时
注册时间
2014-9-16
最后登录
2016-3-9

楼主
dkyyy 在职认证  发表于 2014-9-17 12:09:53 |只看作者 |坛友微信交流群|倒序 |AI写论文
相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
大家好!请教个SAS按定义规则生成新变量问题:数据集jing1有三个变量device_id,time和intensity,如下图
SAS_jing.png
目标是生成新的数据集jing2,在jing1基础上增加两个变量var1和var2。

var1生成规则如下:
当i=1时(即是第一个观测值),var1(i)=0;
当i>1时,var1(i)=intensity(i)-intensity(i-1)

var2生成规则如下:
当i=1或i=last(即为第一个或者最后一个观测值)时,var2(i)=0;

当i>1时且i≠last,var1(i)={intensity(i)-intensity(i-1)} / {intensity(i)-intensity(i+1)}。为避免此情况下分母为0,当intensity(i)=intensity(i+1)时,var2=0。

上传总是失败,测试数据集见https://bbs.pinggu.org/forum.php?mod=viewthread&tid=3210337&pid=26533938&page=1&extra=#pid26533938

望大家多多帮忙哈~

二维码

扫码加我 拉你入群

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

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

关键词:新变量 intensity pinggu device thread

沙发
dkyyy 在职认证  发表于 2014-9-17 13:45:39 |只看作者 |坛友微信交流群
SAS中判断最后一个观测值的语句
data jing2;
set jing1 end=last ;
if last then shake=1000;
else shake=intensity-lag(intensity);
run;
但如何判断是第一个观测值的情况?

使用道具

藤椅
zhengbo8 发表于 2014-9-17 14:30:01 |只看作者 |坛友微信交流群
i是什么?

使用道具

板凳
dkyyy 在职认证  发表于 2014-9-17 14:39:27 |只看作者 |坛友微信交流群
zhengbo8 发表于 2014-9-17 14:30
i是什么?
i 是观测值的顺序,i=1就是第一个观测值,i=2是第二个观测值,以此类推

使用道具

报纸
dkyyy 在职认证  发表于 2014-9-17 14:50:32 |只看作者 |坛友微信交流群
zhengbo8 发表于 2014-9-17 14:30
i是什么?
这个程序卡在 1、如何用if判断是第一个观察值
                    2、变量intensity的前一个值可以用lag函数获取,后一个值如何获取?

使用道具

地板
苹果叶 在职认证  发表于 2014-9-17 23:33:09 |只看作者 |坛友微信交流群
这个程序卡在 1、如何用if判断是第一个观察值   if _n_=1; 假设device id 有不一样的,by device_id; 后用first.device_id
                    2、变量intensity的前一个值可以用lag函数获取,后一个值如何获取?
参考思路:
data a;   **original data;
  set a;
  ord=_n_;
run;

data b;
  set a(firstobs=2);
  ord=_n_;
  rename idensity=idensity_next;
  keep ord iden:;
run;

data final;
  merge a b;
    by ord;
run;

使用道具

7
dkyyy 在职认证  发表于 2014-9-18 14:25:41 |只看作者 |坛友微信交流群
苹果叶 发表于 2014-9-17 23:33
这个程序卡在 1、如何用if判断是第一个观察值   if _n_=1; 假设device id 有不一样的,by device_id; 后用f ...
成功解决如何判断第一个观测值的问题,thx

使用道具

8
缘oO来如此0o 发表于 2014-9-19 00:12:18 |只看作者 |坛友微信交流群
data jing2;
set jing1;
i=_n_;
var1=intensity-lag(intensity);
if _n_=1 then var1=0;end;
run;
proc transpose data=jing2(keep=intensity) out=jing3(drop=_name_);run;

        data jing4(keep=i var2);
                set jing3;
                array arr{*} _numeric_;
                do i=1 to dim(arr) by 1;
                        if i=1 or i=dim(arr) then var2=0;
                        else if arr-arr[i+1] ne 0 then var2=(arr-arr[i-1])/(arr-arr[i+1]);output ;
                end;
        run;
data jing;
merge jing2 jing4;
by i;
run;

使用道具

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

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

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

GMT+8, 2024-4-23 17:10