Tranfering float via SPI beween two arduinos

I don't see how 'command' gets set to the different incoming values. It starts at 0 so it goes through case 0 which sets command to whatever byte arrived ('a') and responds with 0. For the next arriving character ('b') command is 'a' so the first data byte is sent (195). Same for the other two data bytes.

0, 195, 195, 195

Exactly what you are receiving. Perhaps you should send the byte corresponding to the command. Remember, the outgoing data you put in SPDR won't go out until the next byte is received:

  switch (c)
  {
  case 0:
    SPDR = 0;
    break;
    
  // incoming byte, return byte result
  case 'a':
    SPDR = data.b[0];  
    break;
    
  // incoming byte, return byte result
  case 'b':
    SPDR = data.b[1];  
    break;

  // incoming byte, return byte result    
  case 'c':
    SPDR = data.b[2];  
    break;

  // incoming byte, return byte result    
  case 'd':
    SPDR = data.b[3];  
    break;

  } // end of switch