楼主: moonstone
2738 10

点对点数据匹配程序咨询 [推广有奖]

已卖:1871份资源

讲师

74%

还不是VIP/贵宾

-

威望
0
论坛币
10497 个
通用积分
369.1083
学术水平
160 点
热心指数
169 点
信用等级
124 点
经验
274256 点
帖子
237
精华
1
在线时间
520 小时
注册时间
2007-4-27
最后登录
2024-12-6

楼主
moonstone 发表于 2013-11-18 13:07:15 |AI写论文
100论坛币
现有一个点对点数据匹配的问题,不知道如何采用SAS程序方便快捷地实现,没有什么可以给各位的,只能给大家一点论坛币,以作答谢。希望各位加以指点。再次感谢!^_^

具体数据如下,
IDfood1food2FU_timeFU_region
112102013-03-071
215122013-04-063
31192013-01-214
41292013-04-105
51192013-05-103
61192013-02-242
71082013-05-141
81082013-06-132
9972013-03-302
10972013-06-173


目的:
1、根据每个个体两种食物(food1)和(food2)的摄入量,以及每种食物的食物成分表(见下面表2),计算每个个体每种食物成分(包括energy, carbohydrate, protein, fat)的总摄入量
ingredientsfood1food2
energy240150
carbohydrate12065
protein4535
fat1325

2、根据每个个体随访时间(FU_time)及随访所在地(FU_region),以及不同地区不同时间的空气检测结果(见下表3),确定每个个体随访当时所暴露的空气污染指数
DATEregion1region2region3region4region5
2013-03-07152013256
2013-04-066275264663
2013-01-216780274868
2013-04-107286295174
2013-05-107791305379
2013-02-243747183335
2013-05-144253203641
2013-06-134758213846
2013-03-305264234152
2013-06-175769244357


最终希望得到的数据集基本结构如下:
IDfood1food2energycarbohydrateproteinfatFU_air_pollu
11210
21512
3119
4129
5119
6119
7108
8108
997
1097


最佳答案

吕小布韦 查看完整内容

这是运行结果. 你也把你的运行结果贴上来呗. 共同找问题
关键词:数据匹配 点对点 Ingredients Hydrate Protein 点对点 程序

回帖推荐

吕小布韦 发表于7楼  查看完整内容

data a; infile datalines; input ID food1 food2 FU_time yymmdd10. FU_region ; format fu_time yymmdd10.; datalines; 1 12 10 2013-3-7 1 2 15 12 2013-4-6 3 3 11 9 2013-1-21 4 4 12 9 2013-4-10 5 5 11 9 2013-5-10 3 6 11 9 2013-2-24 2 7 10 8 2013-5-14 1 8 10 8 2013-6-13 2 9 9 7 2013-3-30 2 10 9 7 2013-6-17 3 ; run; data b; input ingredients $ food1 food2 ; datalin ...

沙发
吕小布韦 发表于 2013-11-18 13:07:16
这是运行结果. 你也把你的运行结果贴上来呗. 共同找问题

搜狗截图13年11月18日1824_1.jpg (115.55 KB)

搜狗截图13年11月18日1824_1.jpg

藤椅
吕小布韦 发表于 2013-11-18 14:05:27
data d;
set a; *第一个数据集;
do i=1 to 4;
set b(rename=(food1=food11 food2=food22) drop=ingredients) nobs=nobs point=i;*对应第二个数据集;
if i=1 then en=food1*food11+food2+food22;
if i=2 then car=food1*food11+food2+food22;
if i=3 then pro=food1*food11+food2+food22;
if i=4 then fat=food1*food11+food2+food22;
end;
array d d1-d5;
do v= 1 to 10;
set e(rename=(date=date1)) nobs=nobs2 point=v;*对应第三个数据集, 数据结构完全一致;
if fu_time=date1 then
dis=d[fu_region];
end;
keep id food1 food2 fu_time fu_region en car pro fat dis;*dis是污染指数;
run;

板凳
moonstone 发表于 2013-11-18 15:25:07
吕小布韦 发表于 2013-11-18 14:05
data d;
set a; *第一个数据集;
do i=1 to 4;
非常感谢,第一个问题有一点小的笔误,不过没关系,主体程序是对的,但是第二个问题调用矩阵的时候似乎有点问题,能否再检查一下。再次感谢!

报纸
吕小布韦 发表于 2013-11-18 16:28:56
moonstone 发表于 2013-11-18 15:25
非常感谢,第一个问题有一点小的笔误,不过没关系,主体程序是对的,但是第二个问题调用矩阵的时候似乎有 ...
嗯....?我刚才检查了一下, 没问题呀..比如, id=7, 对应的污染指数是42, 程序跑出来也是42

地板
moonstone 发表于 2013-11-18 16:41:20
吕小布韦 发表于 2013-11-18 16:28
嗯....?我刚才检查了一下, 没问题呀..比如, id=7, 对应的污染指数是42, 程序跑出来也是42
非常感谢,可是我污染指数的数据好像并不上,能把你完整的程序发一下,包括样板数据的生成语句,非常感谢,^_^

7
吕小布韦 发表于 2013-11-18 18:24:33
data a;
infile datalines;
input ID food1 food2 FU_time yymmdd10. FU_region ;
format fu_time yymmdd10.;
datalines;
1 12 10 2013-3-7  1
2 15 12 2013-4-6  3
3 11 9 2013-1-21  4
4 12 9 2013-4-10  5
5 11 9 2013-5-10  3
6 11 9 2013-2-24  2
7 10 8 2013-5-14  1
8 10 8 2013-6-13  2
9 9 7 2013-3-30  2  
10 9 7 2013-6-17 3
;
run;

data b;
input ingredients $ food1 food2 ;
datalines;
energy 240 150
carbohydrate 120 65
protein 45 35
fat 13 25
;
run;
data e;
input date yymmdd10. d1-d5;
format date yymmdd10.;
datalines;
2013-3-7  15 20 13 25 6
2013-4-6  62 75 26 46 63
2013-1-21 67 80 27 48 68
2013-4-10 72 86 29 51 74
2013-5-10 77 91 30 53 79
2013-2-24 37 47 18 33 35
2013-5-14 42 53 20 36 41
2013-6-13 47 58 21 38 46
2013-3-30 52 64 23 41 52
2013-6-17 57 69 24 43 57
;
run;

data d;
set a; put _all_;
do i=1 to 4;
set b(rename=(food1=food11 food2=food22) drop=ingredients) nobs=nobs point=i;
if i=1 then en=food1*food11+food2+food22;
if i=2 then car=food1*food11+food2+food22;
if i=3 then pro=food1*food11+food2+food22;
if i=4 then fat=food1*food11+food2+food22;
end; put _all_;
array d d1-d5;
do v= 1 to 10;
set e(rename=(date=date1)) nobs=nobs2 point=v;
if fu_time=date1 then
dis=d[fu_region]; put '***' _all_ '***';
end;
keep id food1 food2 fu_time fu_region en car pro fat dis;
run;

8
moonstone 发表于 2013-11-18 21:48:06
吕小布韦 发表于 2013-11-18 18:26
这是运行结果. 你也把你的运行结果贴上来呗. 共同找问题
非常感谢,空气污染指数数据库变量我定义有点问题,你的是对的,不过第一个问题有点小的笔误
food2+food22
应为
food2*food22

再次感谢!^_^

9
moonstone 发表于 2013-11-18 22:03:07
吕小布韦 发表于 2013-11-18 18:24
data a;
infile datalines;
input ID food1 food2 FU_time yymmdd10. FU_region ;
不知是否熟悉SQL语言,原本以为采用SQL是最简单快捷的方法,没想到数据矩阵的方法也这么简洁。

如果熟悉SQL的话,能否用SQL语言也帮忙解决一下,想看看两种方法哪个更简洁!^_^

10
吕小布韦 发表于 2013-11-19 08:47:25
moonstone 发表于 2013-11-18 21:48
非常感谢,空气污染指数数据库变量我定义有点问题,你的是对的,不过第一个问题有点小的笔误
food2+food ...
哦哦..这个地方..谢谢啦! sql我只是初学, 不是很熟悉, 所以一下子反应不到, 我看看吧. 能够多一种更简洁的方法也是很好的!

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-29 13:05