SAS宏程序:对由数字和字符索引的数据库进行计算

时间:2014-09-29 07:25:22

标签: sas sas-macro

我正在开展一个项目,我在特定地理层面拥有数据。由于历史原因,这些区域被编入索引:

01 02 ... 19 的 2A 2B 21 ... 95

我想在这些区域中运行一个程序,数据库被索引为sthg_d theindex (sthg_d01; sthg_d2A ...),并将它们与国家数据库合并我有这个地理区域索引(它是 dep

目前我所做的是创建一个包含相应索引的表 (1:01; 2:02; 19:19; 20:21; 28:29; 29:2A; 30:2B; 31:30 ......) 然后我尝试通过搜索此列表中的每个文件进行合并。它适用于数字索引,但幸运的是它不适用于字符中的两个索引,我得到了

ERROR 388-185: Opérateur arithmétique requis.
ERROR 202-322: L'option ou le paramètre n'est pas reconnu(e) et sera ignoré(e).

哪位是英文:

ERROR 388-185: Expecting an arithmetic operator.
ERROR 202-322: The option or parameter is not recognized and will be ignored.

这是我的代码

%macro appar ();  

data _null_;
set dep.dep2; /*the table with (1:01 ; 2:02 ; 19 : 19 ; 20 : 21 ; 28 : 29 ; 29 : 2A ; 30 : 2B ; 31 : 30...) */
call symput('d'!!left(_n_),dep2); /* variable with 01;02;... is called dep2 */
run;

%do i=1 %to 96 ;  /* 2 pour tester sinon 96 sur la métropole */

/* I try to create my subtable i of the national one */
data f(keep = dep dirindik);
    set FoyerN.foyer;
    length dep $2;
    dep=substr(dirindik,1,2);
    if dep=&&&d&i;
run;

我有问题,在如果dep =&&& d& i

/* The core of my problem : the merge */ 
data p;
    merge f(in=x) PotePrec.pote&anprec._d&&d&i (in=y);
    by dirindik;
    if x and y;
run;


%end; /* du %do */
%mend appar; 

1 个答案:

答案 0 :(得分:2)

由于dep被定义为$ 2字符变量,因此需要将其与字符串常量进行比较,如下所示:

if dep="&&&d&i";