SAS宏使用循环反规范化
SAS Macro denormalizing by using loop
我不知道我能在宏循环中做到这一点。
例如,这是表A
ID -- Fruit -- Count
1 Banana 1
1 Strawberry 2
1 Apple 3
1 Blueberries 4
2 Apple 1
3 Strawberry 1
3 Apple 2
我通常喜欢这样做而不使用 SAS MACRO
proc sql;
select ID,t2.fruit AS fruit1,
t3.fruit AS fruit2,
.
.
.
from core_table t1
LEFT JOIN TableA t2 on t2.id = t1.id AND t2.count=1
LEFT JOIN TableA t3 on t3.id = t1.id AND t3.count=2
.
.
.
.
所以输出就像
ID Fruit1 Fruit2 Fruit3 Fruit4
1 Banana Strawberry Apple Blueberries
2 Apple
3 Strawberry Apple
基本上,输出将对变量进行非规范化。
所以我猜我可以通过使用 Do 循环来完成这个任务,我一直在谷歌搜索但我不知道该怎么做。
谢谢
这样的东西不需要宏。只需使用 PROC TRANSPOSE。
首先让我们将您的列表转换为实际的 SAS 数据集,以便我们进行测试。
data have ;
input id fruit :. count;
cards;
1 Banana 1
1 Strawberry 2
1 Apple 3
1 Blueberries 4
2 Apple 1
3 Strawberry 1
3 Apple 2
;
这是转换它的 PROC TRANSPOSE 代码。
proc transpose data=have out=want prefix=Fruit;
by id;
var fruit;
id count;
run;
结果:
Obs id _NAME_ Fruit1 Fruit2 Fruit3 Fruit4
1 1 fruit Banana Strawberry Apple Blueberries
2 2 fruit Apple
3 3 fruit Strawberry Apple
Proc REPORT
带有两个 group
变量和一个 across
变量也将以所需的输出布局呈现数据。
data have;
length fruit ;
input ID Fruit $ Count; datalines;
1 Banana 1
1 Strawberry 2
1 Apple 3
1 Blueberries 4
2 Apple 1
3 Strawberry 1
3 Apple 2
run;
proc report data=have;
columns ID Fruit,Count;
define ID / group;
define Fruit / group;
define Count / display across ' ' ;
run;
我不知道我能在宏循环中做到这一点。
例如,这是表A
ID -- Fruit -- Count
1 Banana 1
1 Strawberry 2
1 Apple 3
1 Blueberries 4
2 Apple 1
3 Strawberry 1
3 Apple 2
我通常喜欢这样做而不使用 SAS MACRO
proc sql;
select ID,t2.fruit AS fruit1,
t3.fruit AS fruit2,
.
.
.
from core_table t1
LEFT JOIN TableA t2 on t2.id = t1.id AND t2.count=1
LEFT JOIN TableA t3 on t3.id = t1.id AND t3.count=2
.
.
.
.
所以输出就像
ID Fruit1 Fruit2 Fruit3 Fruit4
1 Banana Strawberry Apple Blueberries
2 Apple
3 Strawberry Apple
基本上,输出将对变量进行非规范化。 所以我猜我可以通过使用 Do 循环来完成这个任务,我一直在谷歌搜索但我不知道该怎么做。
谢谢
这样的东西不需要宏。只需使用 PROC TRANSPOSE。
首先让我们将您的列表转换为实际的 SAS 数据集,以便我们进行测试。
data have ;
input id fruit :. count;
cards;
1 Banana 1
1 Strawberry 2
1 Apple 3
1 Blueberries 4
2 Apple 1
3 Strawberry 1
3 Apple 2
;
这是转换它的 PROC TRANSPOSE 代码。
proc transpose data=have out=want prefix=Fruit;
by id;
var fruit;
id count;
run;
结果:
Obs id _NAME_ Fruit1 Fruit2 Fruit3 Fruit4
1 1 fruit Banana Strawberry Apple Blueberries
2 2 fruit Apple
3 3 fruit Strawberry Apple
Proc REPORT
带有两个 group
变量和一个 across
变量也将以所需的输出布局呈现数据。
data have;
length fruit ;
input ID Fruit $ Count; datalines;
1 Banana 1
1 Strawberry 2
1 Apple 3
1 Blueberries 4
2 Apple 1
3 Strawberry 1
3 Apple 2
run;
proc report data=have;
columns ID Fruit,Count;
define ID / group;
define Fruit / group;
define Count / display across ' ' ;
run;