Macros 将每次观察中的变量值导出到宏变量
我有一个名为Macros 将每次观察中的变量值导出到宏变量,macros,sas,Macros,Sas,我有一个名为term\u table的表,其中包含以下列 comp,术语类型,术语,得分,排名 我通过每次观察,在每次obs中,我想将变量秩的值存储到一个名为curr\r的宏变量中。我在下面创建的代码不起作用 Data Work.term_table; input Comp $ Term_type $ Term $ Score Rank ; datalines; comp1 term_type1 A 1 1
term\u table
的表,其中包含以下列
comp
,术语类型
,术语
,得分
,排名
我通过每次观察,在每次obs中,我想将变量秩的值存储到一个名为curr\r
的宏变量中。我在下面创建的代码不起作用
Data Work.term_table;
input Comp $
Term_type $
Term $
Score
Rank
;
datalines;
comp1 term_type1 A 1 1
comp2 term_type2 A 2 10
comp3 term_type3 A 3 20
comp4 term_type4 B 4 20
comp5 term_type5 B 5 40
comp6 term_type6 B 6 100
;
Run;
%local j;
DATA tmp;
SET term_table;
LENGTH freq 8;
BY &by_var term_type term;
RETAIN freq;
CALL SYMPUT('curr_r', rank);
IF first.term THEN DO;
%do j = 1 %to &curr_r;
do some thing
%end;
END;
RUN;
你能帮我解决这个问题吗
非常感谢
挂起call symput语句确实使用rank的值创建了宏var&curr,但它在数据步骤之后才可用 但是,我认为您不需要创建宏var&curr\r。我认为根本不需要宏 我认为以下方法应该有效:(未经测试) 要将秩的每个值存储在宏变量中,请执行以下操作:
Proc Sql noprint;
select count(rank)
into :cnt
from term_table;
%Let cnt=&cnt;
select rank
into :curr_r1 - :curr_r&cnt
from term_table;
quit;
call symput语句使用rank值创建宏var&curr\r,但在数据步骤之后才可用 但是,我认为您不需要创建宏var&curr\r。我认为根本不需要宏 我认为以下方法应该有效:(未经测试) 要将秩的每个值存储在宏变量中,请执行以下操作:
Proc Sql noprint;
select count(rank)
into :cnt
from term_table;
%Let cnt=&cnt;
select rank
into :curr_r1 - :curr_r&cnt
from term_table;
quit;
非常感谢。在术语表中,假设术语“A”有3个秩值:1、10、20。现在假设我在obs term=A,秩=10。我需要做一个循环:“doj=2到10”。如果我在term=A,rank=20,我需要做一个循环:“Do j=11至20)。这意味着我应该在每个obs上存储上一个列组和当前列组来执行循环。你能给我一些建议吗。HungHi,是的,最后我发现我不需要宏变量来解决我的问题。非常感谢您的帮助…我用一些示例数据更新了您的答案,如有必要,请进行更改。把你的附加问题添加到你的原始问题中,这样会使答案有意义。示例数据使帮助更容易…非常感谢。在术语表中,假设术语“A”有3个秩值:1、10、20。现在假设我在obs term=A,秩=10。我需要做一个循环:“doj=2到10”。如果我在term=A,rank=20,我需要做一个循环:“Do j=11至20)。这意味着我应该在每个obs上存储上一个列组和当前列组来执行循环。你能给我一些建议吗。HungHi,是的,最后我发现我不需要宏变量来解决我的问题。非常感谢您的帮助…我用一些示例数据更新了您的答案,如有必要,请进行更改。把你的附加问题添加到你的原始问题中,这样会使答案有意义。示例数据使帮助更容易。。。
Proc Sql noprint;
select count(rank)
into :cnt
from term_table;
%Let cnt=&cnt;
select rank
into :curr_r1 - :curr_r&cnt
from term_table;
quit;