Será que posso fazer isso no Macro Loop.
Por exemplo, esta é a tabela 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
Eu normalmente gosto disso sem usar 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
.
.
.
.
então a saída é como
ID Fruit1 Fruit2 Fruit3 Fruit4
1 Banana Strawberry Apple Blueberries
2 Apple
3 Strawberry Apple
Basicamente, o Output desnormalizará as variáveis. Portanto, estou supondo que posso fazer essa tarefa usando o loop Do, andei pesquisando, mas não consigo descobrir como fazer.
obrigado
Não há necessidade de macro para algo assim. Basta usar PROC TRANSPOSE.
Primeiro, vamos converter sua listagem em um conjunto de dados SAS real para que tenhamos algo para testar.
data have ;
input id fruit :$20. count;
cards;
1 Banana 1
1 Strawberry 2
1 Apple 3
1 Blueberries 4
2 Apple 1
3 Strawberry 1
3 Apple 2
;
Aqui está o código PROC TRANSPOSE para convertê-lo.
proc transpose data=have out=want prefix=Fruit;
by id;
var fruit;
id count;
run;
Resultados:
Obs id _NAME_ Fruit1 Fruit2 Fruit3 Fruit4
1 1 fruit Banana Strawberry Apple Blueberries
2 2 fruit Apple
3 3 fruit Strawberry Apple
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras