TRISEbits.TRISE6 = 0; // OUTPUT SCL-3
TRISEbits.TRISE7 = 0; // OUTPUT SDA-3
Unless you're using it elsewhere, that is not SPI but I2C. (They are the correct pins for I2C, but the MCP4921 isn't an I2C device. Also I2C pins are usually configured as inputs/open-drain, with pull-ups).
Some DAC's or ADC's are so minimalistic set-up, they only have a SDI (MOSI/DAC) or SDO (MISO/ADC), clock and chip select pin. Some DAC's don't have any registers to read from, so they saved a pin by leaving out the MISO
See the pinout of the chip and notice how the bold RPx are shown. These are pins that can have a variety of pins mapped to them. Peripherals like UART, SPI, most timer input/outputs, and most external interrupts are only active&accessible via PPS (peripheral pin select) module.
You have to map the pins to the reprogrammable Pins you use at start-up. For example (XC16 code):
#include <pps.h>
[..]
PPSUnLock; // unlocks PPS for configuration
iPPSOutput(OUT_PIN_PPS_RP7, OUT_FN_PPS_SCK1OUT); // Reprogrammable Pin 7 = SPI SCK 1
iPPSOutput(OUT_PIN_PPS_RP8, OUT_FN_PPS_SDO1); // Reprogrammable Pin 8 = SPI MOSI 1
iPPSInput(IN_FN_PPS_SDI1, IN_PIN_PPS_RP20); // Reprogrammable Pin 20 = SPI MISO 1
PPSLock;
[..]
You also need to set TRIS registers correctly for each pin, and also good thing to check if analog features are disabled (if available) for that pin.
Edit: I suspect you're using a PIC24FJ128GB210 or PIC24FJ128DA210, because those are only the few parts that end with 210.