I've several SAS (PROC SQL) queries using a `MIN(startdate)` and `MAX(enddate)`.  

To avoid having to calculate these every time I want to do this once at the beginning and store it in a macro variable but I get an error every time.

What is going wrong or how to achieve this ?  

Thanks in advance for the help !

**This works:**

```
WHERE DATE BETWEEN 
    (SELECT MIN(startdate format yymmddn8. FROM work.mydata)
AND (SELECT MAX(enddate format yymmddn8. FROM work.mydata)

```

`DATE` format is `YYMMDD8n` and length is `8`.

**Creating macro variables:**

```
PROC SQL;
    SELECT MIN(startdate), MAX(enddate)
    INTO :start_date, :end_date
    FROM work.mydata
QUIT;

/*Formatting the macro variable:*/
%macro format(value,format);
    %if %datatyp(&value)=CHAR
        %THEN %SYSFUNC(PUTC(&value, &format));
    %ELSE %LEFT(%QSYSFUNC(PUTN($value,&format)));
%MEND format;

```

**Tried:**

```
WHERE DATE BETWEEN "%format(&start_date, yymmddn8.)" AND "%format(&end_date, yymmddn8.)"   

```

**Error message:**

```
ERROR: Expression using equals (=) has components that are of different data types

```