Sas 如何转换字符串日期';YYYYMM';到MonYY格式?

Sas 如何转换字符串日期';YYYYMM';到MonYY格式?,sas,enterprise-guide,Sas,Enterprise Guide,我想将格式为YYYYMM的字符串日期变量转换为格式为MonYY的新变量 例如,如果字符串是201810,那么新变量将是OCT18(SAS中的monyy.format) 例如: %let var='201810' 我怎样才能创建一个新变量,比如说我想要的格式的newVar?这里有两种方法,一种是在数据步骤中显示的,也可以用来创建宏变量,并且只使用宏函数 选项1: %let var = '201810'; data demo; y=input(&var., yymmn6.); z=put

我想将格式为YYYYMM的字符串日期变量转换为格式为MonYY的新变量

例如,如果字符串是201810,那么新变量将是OCT18(SAS中的monyy.format)

例如:
%let var='201810'


我怎样才能创建一个新变量,比如说我想要的格式的
newVar

这里有两种方法,一种是在数据步骤中显示的,也可以用来创建宏变量,并且只使用宏函数

选项1:

%let var = '201810';

data demo;

y=input(&var., yymmn6.);
z=put(y, monyy5.);
call symputx('newVar', z);
run;

%put &newVar.;
%let NewVar2 = %sysfunc(inputn(%sysfunc(dequote(&var)), yymmn6.), monyy5.);
%put &NewVar2.;
选项2:

%let var = '201810';

data demo;

y=input(&var., yymmn6.);
z=put(y, monyy5.);
call symputx('newVar', z);
run;

%put &newVar.;
%let NewVar2 = %sysfunc(inputn(%sysfunc(dequote(&var)), yymmn6.), monyy5.);
%put &NewVar2.;

为什么要使用宏和带引号的值

'201810'到宏观环境中的'OCT18'

%let var = '201810';
%let var_as_monyy = %sysfunc(quote(%sysfunc(putn(%sysfunc(inputn(%sysfunc(dequote(&var)),yymmn6)),monyy5.)),%str(%')));

%put &=var;
%put &=var_as_monyy;
%let var = 201810;
%let var_as_monyy = %sysfunc(putn(%sysfunc(inputn(%sysfunc(dequote(&var))01,yymmn6)),monyy5.));

%put &=var;
%put &=var_as_monyy;
201810OCT18宏观环境

%let var = '201810';
%let var_as_monyy = %sysfunc(quote(%sysfunc(putn(%sysfunc(inputn(%sysfunc(dequote(&var)),yymmn6)),monyy5.)),%str(%')));

%put &=var;
%put &=var_as_monyy;
%let var = 201810;
%let var_as_monyy = %sysfunc(putn(%sysfunc(inputn(%sysfunc(dequote(&var))01,yymmn6)),monyy5.));

%put &=var;
%put &=var_as_monyy;
'201810'数据步骤和数据集上下文中的日期字符串

%let var = '201810';
data want;
  date = input (&var, yymmn6.);
  format date monyy5.;
run;
proc print data=want;run;

请张贴您尝试过的任何内容。宏变量中是否必须有引号?这就是问题的秘诀。您想要数据集变量还是宏变量?谢谢!这种方法的一种变体奏效了。我需要引号是因为我以后引用变量的方式,但是我也保存了这个变量,没有引号。