如何为每个独特区域创建宏变量并将最小量分配给相应的宏变量

How to create Macro variable for each unique region and assigned minimum amount to respective macro variable

我有一个数据集,其中包含三个 variable.below 是示例数据集。

Id  Region  Amount
1   A   20
1   A   40
1   A   50
2   B   40
2   B   30
2   B   60
3   C   10
3   C   30
4   D   20
4   D   50
4   D   10

我想为每个区域创建宏变量,然后将最小量分配给这些变量。 例如,在上述数据集的情况下,答案应该是 4 个宏变量,其值为:

macro_var   val
A           20
B           30
C           10
D           10

非常感谢任何帮助。

Select 将 ids 放入一个宏变量中,这样您就可以遍历它们并找到每个 amount 的最小值:

data temp;
   input Id $ Region $ Amount $;
   datalines;
     1 A 20 
     1 A 40 
     1 A 50
     2 B 40 
     2 B 30 
     2 B 60 
     3 C 10
     3 C 30
     4 D 20 
     4 D 50 
     4 D 10
    ;
run;

proc sql noprint;
    select distinct region into: region_list separated by " " from temp;
quit;

%macro assign_vars;

    %do i = 1 %to %sysfunc(countw(&region_list.));
    %let this_region = %scan(&region_list., &i.);

        %global min_of_region_&this_region.;

        proc sql noprint;
            select min(amount) into: min_of_region_&this_region. from temp (where = (region = "&this_region."));
        quit;

    %end;


%mend assign_vars;

%assign_vars;

%put &min_of_region_A.;
%put &min_of_region_B.;
%put &min_of_region_C.;
%put &min_of_region_D.;

我会在 SQL 中使用 GROUP BY 语句,然后在数据步骤中使用 CALL SYMPUT 来创建宏变量:

proc sql;
    create table temp2 as
    select Region, min(amount) as minamount
    from temp
    group by Region;
quit;

data _null_;
    set temp2;
    call symput(Region,minamount);
run;