【发布时间】:2015-05-26 10:23:52
【问题描述】:
我正在尝试根据不同的货币进行一些计算,其中输出数据集由包含公司名称的列组成,以下列是每种特定货币中每家公司的总和(因此每种货币一个总和列)。我想通过使用每种货币的循环进行计算,循环遍历货币列表。 由于某些货币的总和非常小或为 0,我想手动指定列/货币在数据集中出现的顺序,因此最大值位于第一列中。
我在数据步骤中按所需顺序制作了货币列表。当我将这些值读入宏变量(使用 Proc Sql 插入...)并使用 %put 语句查看这些值时,顺序已更改为字母顺序。这会导致计算以错误的顺序完成,因此输出数据集中的列也以错误的顺序进行。
有什么方法可以管理列表的顺序和循环通过货币列表的计算,因此它们不会按字母顺序显示,而是按我想要的顺序显示?
%macro csa;
data CSA_view;
set csa;
%do i=1 %to &number_of_curr;
%let Curr = %scan(¤cy_list, &i);
keep counterparty mtm_&curr;
if currency = "&curr" then MTM_&Curr = MTM;
%end;
run;
%mend;
%csa;
【问题讨论】: