对格式化值执行 sas 语句而不是真实值
Performing sas statements on formatted values not true value
我有一个包含两个格式化变量的数据集,一个是原始代码(代表一个国家/地区的名称),另一个是将该代码翻译成国家/地区的标准化代码。这两种都使用显示国家名称的格式。
我想输出格式化值不同的值,而不考虑真实值。例如,如果我有以下数据(方括号中显示的格式):
obs Country_raw[formatted value] Country_std[formatted value]
1 2211[Spain] 3108[Spain]
2 9122[Zaire] 9108[Democratic Republic of Congo]
对于两条记录,两个真实值都不匹配,但我只想输出第二条记录,其中格式化值不匹配。
我试过了
data diffs;
set countries;
format country_raw $CRAW.;
format country_std $CSACC.;
if country_raw ne country_std THEN OUTPUT;
run;
但这使用了真实值。
我也尝试过使用 proc print:
proc print data=countries;
format country_raw $CRAW.;
format country_std $CSACC.;
where country_raw ne country_std;
run;
但这也适用于真实值。
相等性是在基础值而不是格式化值上测试的。
尝试
put(country_raw,$CRAW.) ^= put(country_std,$CSACC.)
根据你的情况。
put()
函数将值从存储值转换为格式化值。
在数据步骤中,您可以使用VVALUE function,如下所示:
proc format;
value countryF
1='Spain'
2='Zaire';
value country2F
4='Spain'
6='Zaire'
7='Morocco';
quit;
data have;
input country_raw country_std;
format country_raw COUNTRYF.
country_std COUNTRY2F.;
datalines;
1 4
2 7
;;;
run;
data want;
set have;
if vvalue(country_raw) = vvalue(country_std);
run;
VVALUE 在 PROC SQL 环境中不可用(包括 procs 或数据步骤中的 WHERE 语句),但是,您需要使用 PUT。 VVALUE 的优点是您无需知道特定字段的格式名称即可查看其格式化值。
我有一个包含两个格式化变量的数据集,一个是原始代码(代表一个国家/地区的名称),另一个是将该代码翻译成国家/地区的标准化代码。这两种都使用显示国家名称的格式。
我想输出格式化值不同的值,而不考虑真实值。例如,如果我有以下数据(方括号中显示的格式):
obs Country_raw[formatted value] Country_std[formatted value]
1 2211[Spain] 3108[Spain]
2 9122[Zaire] 9108[Democratic Republic of Congo]
对于两条记录,两个真实值都不匹配,但我只想输出第二条记录,其中格式化值不匹配。
我试过了
data diffs;
set countries;
format country_raw $CRAW.;
format country_std $CSACC.;
if country_raw ne country_std THEN OUTPUT;
run;
但这使用了真实值。
我也尝试过使用 proc print:
proc print data=countries;
format country_raw $CRAW.;
format country_std $CSACC.;
where country_raw ne country_std;
run;
但这也适用于真实值。
相等性是在基础值而不是格式化值上测试的。
尝试
put(country_raw,$CRAW.) ^= put(country_std,$CSACC.)
根据你的情况。
put()
函数将值从存储值转换为格式化值。
在数据步骤中,您可以使用VVALUE function,如下所示:
proc format;
value countryF
1='Spain'
2='Zaire';
value country2F
4='Spain'
6='Zaire'
7='Morocco';
quit;
data have;
input country_raw country_std;
format country_raw COUNTRYF.
country_std COUNTRY2F.;
datalines;
1 4
2 7
;;;
run;
data want;
set have;
if vvalue(country_raw) = vvalue(country_std);
run;
VVALUE 在 PROC SQL 环境中不可用(包括 procs 或数据步骤中的 WHERE 语句),但是,您需要使用 PUT。 VVALUE 的优点是您无需知道特定字段的格式名称即可查看其格式化值。